#python #flask
#python #flask
Вопрос:
У меня есть приложение flask, которое отлично работает на ноутбуках / настольных компьютерах, но на мобильных телефонах и небольших экранах маршрут входа не работает должным образом.
Когда я хочу войти в свое приложение на мобильном телефоне, страница входа перенаправляется на саму себя, и ничего не происходит. Я думаю, что эта проблема каким-то образом связана с функцией, оформленной сеансом или входом. Иногда это срабатывает внезапно, но не часто отвечает.
Что я могу теперь сделать?
Вот мои заголовки приложений и маршрут входа:
from cs50 import SQL
from math import ceil
from flask import Flask, flash, redirect, render_template, request, session
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.security import check_password_hash, generate_password_hash
from helpers import intro_alert, main_alert, login_required, usd, ex_separator, separator,
cmc_logo, exchange_rates, cmc_quote, cmc_listing, cmc_info, exchanges, exchange_pairs, cmc_projects
coinjito = Flask(__name__)
coinjito.config["TEMPLATES_AUTO_RELOAD"] = True
@coinjito.after_request
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
return response
coinjito.config["SESSION_FILE_DIR"] = mkdtemp()
coinjito.config["SESSION_PERMANENT"] = False
coinjito.config["SESSION_TYPE"] = "filesystem"
Session(coinjito)
@coinjito.route("/login", methods=["GET", "POST"])
def login():
session.clear()
if request.method == "GET":
return render_template("login.html")
else:
rows = db.execute("SELECT * FROM users WHERE username=:username",
username=request.form.get("username"))
if len(rows) != 1 or not check_password_hash(rows[0]["password"],
request.form.get("password")):
return intro_alert("Apology", "alert-danger", "Login Failed",
"Invalid username and/or password.", "/login", "Go Back")
session["user_id"] = rows[0]["id"]
session["username"] = rows[0]["username"]
return redirect("/tracking")
@coinjito.route("/tracking")
@login_required
И вот моя вспомогательная функция входа в систему:
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if session.get("user_id") is None:
return redirect("/login")
return f(*args, **kwargs)
return decorated_function
Комментарии:
1. Вы проверили на своем рабочем столе режим разработчика [F12] в вашем браузере? итак, вы говорите, что это не работает с маленьким экраном.?
2. Кажется, удаление «config [«SESSION_FILE_DIR»] = mkdtemp ()» из приложения заставляет его работать, но я не знаю, в чем проблема. Я знаю только, что в мобильных браузерах оператор «session.get («user_id»)» возвращает None.
3. вопрос может быть связан с конфиденциальностью на вашем мобильном телефоне, поскольку не позволяет
mkdtemp()