Как обменять данные на сервере python flask-html (pythonanywhere) в приложении AndroidStudio? - PullRequest
0 голосов
/ 09 июня 2019

Мой сервер в Pycharm - это сервер Python flask, а базы данных - это текстовые файлы простых локальных папок.

Я всегда использовал Pythonanywhere для автоматического управления моим сервером.И теперь я вижу, что мой веб-сайт pythonanywhere работает нормально, но он не может обмениваться только цифрами или текстовыми данными в исходном коде, чтобы трепетать приложения.Как я обмениваюсь данными?(Я не использую Firebase, MySQL и т. Д.)

Флэш-http-сервер (Pycharm)data> Android-приложение флаттера, фляга, http-сервер (Pythonanywhere) флаттера, приложение

Я видел 'https://help.pythonanywhere.com/pages/Flask/' и' https://help.pythonanywhere.com/pages/DebuggingImportError/' так много раз, потому что, когда я его спросилпроблема, pythonanywhere всегда говорил, смотрите это страницы, но это было бесполезно.Я успешно установил wsgi, файл окружения и параметры веб-сайта в pythonanywhere.

Каждый раз появляется журнал ошибок, но он не влияет ни на что:


2019-06-06 16:08:45,940: Error running WSGI application
2019-06-06 16:08:45,948: ModuleNotFoundError: No module named 'flask_app'
2019-06-06 16:08:45,948:   File "/var/www/trees2001_pythonanywhere_com_wsgi.py", line 104, in <module>
2019-06-06 16:08:45,948:     from flask_app import app
2019-06-06 16:08:45,948: ***************************************************
2019-06-06 16:08:45,949: If you're seeing an import error and don't know why,
2019-06-06 16:08:45,949: we have a dedicated help page to help you debug: 
2019-06-06 16:08:45,949: https://help.pythonanywhere.com/pages/DebuggingImportError/

И этоисчез, когда я изменил код:

from flask_app import app' -> 'from flask_app import app as application')

flask http server в pythonanywhere /home/trees2001/mysite/flask_app.py:

from flask import Flask, request, url_for, redirect
from werkzeug import secure_filename
import os.path
import datetime

def getInfos(filename):
    f = open(filename, 'r')
    lines = f.readlines()
    f.close()

    # id, pw = [], []
    infos = []
    for line in lines:
        t = line.split(':')
        infos.append((t[0], t[1]))
        # id.append(t[0])
        # pw.append(t[1])

    return infos

def findId(filename, text):
    infos = getInfos(filename)
    for id in infos:
        if str(id[0]) == text:
            return True
    return False

def checkInfo(filename, id, pw):
    infos = getInfos(filename)
    for info in infos:
        if info[0] == id and info[1][:-1] == pw: # info[1]->비밀번호. 마지막의 '\n' 제거. Password. remove last '\n'.
            return True
    return False

def writeInfo(filename, id, pw):
    f = open(filename, 'a')
    f.write('{}:{}\n'.format(id, pw))
    f.close()

def readJustLine(filename, i):
    f = open(filename, 'r')
    lines = f.readlines()
    f.close()
    if i+1 > len(lines):
        return 'error\n'
    return lines[i]

def writeString(filename, string):
    f = open(filename, 'a')
    f.write('{}\n'.format(string))
    f.close()

def makeFile(filename):
    if not os.path.isfile(filename): # 파일 확인 check file
        f = open(filename, 'w')
        f.close()

def saveId(filename, id):
    f = open(filename, 'w')
    f.write(id)
    f.close()

filepath = '/home/trees2001/mysite/info_test.txt'
# path_filename = 'c:/test/path_test.txt'
basic_path = '/home/trees2001/mysite/'
sIdPath = basic_path + 'name4Id.txt'
# fileSavePath = 'C:/Users/Deep-Learning/PycharmProjects/photo_cloud_flask/uploads/'
fileSavePath = '/home/trees2001/mysite/uploads/'

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/home/trees2001/mysite/uploads/'
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
app.config['MAX_CONTENT_PATH'] = 100 * 1024 * 1024

@app.route('/', methods=['GET', 'POST'])
def route():

    return '<h1>Deployed</h1>'

@app.route('/Reg', methods=['GET', 'POST']) # 회원가입 버튼 Register button
def register():
    id = request.form['id']
    pw = request.form['pw']
    print('id: {}, pw: {}'.format(id, pw))

    # if findId(filepath, id) == True:
    #     return 'false'

    # writeInfo(filepath, id, pw)
    # # return 'true'
    return '<h1>{}</h1>'.format(id)
    # return '<h1>ABGC</h1>'

@app.route('/Login', methods=['POST']) # 로그인 버튼 Login button
def login():
    id = request.form['id']
    pw = request.form['pw']

    if checkInfo(filepath, id, pw) == False:
        return 'false'

    # newPath = id + '_path'
    # filepath = makeFile(newPath)
    # filepath = newPath
    makeFile('{0}path_{1}.txt'.format(basic_path, id))

    saveId(sIdPath, id)
    return 'true'

@app.route('/fileUpload', methods = ['GET', 'POST'])
def upload_file():
    # if request.method == 'POST':
    f = request.files['file']
    r = readJustLine(sIdPath, 0)

    # 저장할 경로 + 파일명 saving path + filename
    f.save(fileSavePath + r + datetime.datetime.now().strftime('_%Y-%m-%d_%H-%M-%S.jpg'))

    return 'true'

@app.route('/Path', methods = ['POST'])
def savePath():
    path = request.form['path']
    path_filename = request.form['path_filename']
    writeString(path_filename, path)
    return 'true'

@app.route('/PathList', methods=['POST'])
def pathList():
    n = request.form['n']
    path_filename = request.form['path_filename']

    if n != '':
        check = readJustLine(path_filename, int(n))[:-1]
        if 'error' in check:
            return 'false'
        return check
    return ['']

if __name__ == '__main__':
    app.run()

Одна функция отправки приложения-флаттера Androidstudio:

Future<String> postReply() async {
    if(id == null || pw == null)
      return '';

    var addr = gServerIp + ((mKind == Datakind.REG) ? 'Reg' : 'Login');
    var response = await http.post(addr, body: {'id':id, 'pw':pw});

    if(response.statusCode == 200)
      return response.body;

    throw Exception('데이터 수신 실패'); // Data didn't send
  }

Я проверил сервер по возвращаемым данным, например <h1>Deployed</h1> или {}.format(id).Я думаю, что это будет хорошо работать, но только веб-сайт.Он может вернуть только строку h1 на веб-сайте, но не может заменить ее на мое приложение.

1 Ответ

0 голосов
/ 12 июня 2019

Убедитесь, что созданный вами URL-адрес (строка addr =) на самом деле является действительным URL-адресом, предоставляемым вашим веб-приложением, и, если это так, проверьте содержимое ответа, на который вы получаете ответ.postReply чтобы посмотреть, что происходит на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...