Мой сервер в 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 на веб-сайте, но не может заменить ее на мое приложение.