Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask登录不登录_Python_Flask_Flask Login - Fatal编程技术网

Python Flask登录不登录

Python Flask登录不登录,python,flask,flask-login,Python,Flask,Flask Login,我正在制作一个基于文本的浏览器游戏,但我的登录脚本有问题。 当我登录时什么也没发生,它甚至没有重定向 这是我的密码: 从flask导入flask,呈现模板,重定向,请求,url,会话 从flask_login导入LoginManager、当前用户、登录用户、需要登录 #其中包含配置和数据库连接 从配置导入用户、统计信息、注册用户 从werkzeug.security导入检查\u密码\u散列 #加载用户模型 从用户导入用户 版本=2.00 app=烧瓶(名称) login\u manager=Lo

我正在制作一个基于文本的浏览器游戏,但我的登录脚本有问题。 当我登录时什么也没发生,它甚至没有重定向

这是我的密码:

从flask导入flask,呈现模板,重定向,请求,url,会话
从flask_login导入LoginManager、当前用户、登录用户、需要登录
#其中包含配置和数据库连接
从配置导入用户、统计信息、注册用户
从werkzeug.security导入检查\u密码\u散列
#加载用户模型
从用户导入用户
版本=2.00
app=烧瓶(名称)
login\u manager=LoginManager()
登录管理器。初始化应用程序(应用程序)
login\u manager.login\u视图='login'
app.config['SECRET_KEY']=“lkajdghdadkglajkgah”
#用户加载程序回调
@登录\u manager.user\u加载程序
def加载用户(用户id):
u=users.find_one({“\u id”:user\u id})
如果不是u:
一无所获
返回用户(u[''id'])
@应用程序路径(“/”)
def main():
如果当前用户已通过身份验证:
返回重定向(“/game/”,代码=302)
其他:
返回重定向(“/login/”,代码=302)
@app.route('/login/',方法=['GET','POST'])
def login():
如果当前用户已通过身份验证:
返回重定向(“/game/”,代码=302)
#填写表格时
如果request.method==“POST”:
尝试:
#登录用户
如果请求。表格['logSubmit']='logSubmit':
用户名=请求。表单['logUser']
密码=请求。表单['logPassword']
result=users.find_one({“user”:username})
如果结果和检查密码散列(结果['password\u hash',password):
剩余=结果[''id']
打印(剩余)
用户对象=用户(剩余)
登录用户(用户对象)
返回重定向(request.args.get(“下一步”)或url_for(“游戏”))
除KeyError外:
#注册用户
如果请求。表格['regSubmit']=='regSubmit':
用户名=请求。表单['regUser']
密码=请求。表单['regPassword']
地址=请求。表单['regAddress']
注册用户(用户名=用户名,密码=密码,地址=地址)
打印(地址)
返回重定向(“/login/”,代码=302)
返回渲染模板('out.html')
@app.route(“/game/”)
@需要登录
def game():
返回渲染模板('game.html')
@app.route(“/logout”)
def注销():
注销用户()
返回重定向(“/login/”,代码=302)
这是我的用户类:

class User():
定义初始化(self,id):
self.id=id
self.email=无
打印(str(id)+“已登录”)
#def getStats(self):
#从数据库中获取用户的统计信息
#return“您的getStats()仍在构建中”
@财产
def已通过身份验证(自身):
返回真值
@财产
def处于活动状态(自):
返回真值
@财产
def是匿名的(自我):
返回错误
def get_id(自身):
返回str(self.id)
我现在正在寻找几个小时的解决方案,我已经阅读了flask登录的全部文档,但我无法理解它

请帮帮我


编辑:我删除了旧代码并添加了新代码,但仍然不起作用。

实现登录的一个更简单的方法是使用它来处理大部分表单处理。另外,在您的
User
模型中,从Flask Login的
UserMixin
类继承,该类提供了用户方法和属性的默认实现。

我将给您我的工作登录的代码,该代码使用Flask Login和Flask WTF

查看功能:

@app.route("/login", methods=["GET","POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.get_by_username(form.username.data)
        if user is not None:
            login_user(user, form.remember_me.data)
            flash("logged in successfully as {}".format(user.username))
            return redirect(request.args.get('next') or url_for('index'))
        flash("Incorrect username or password")
    return render_template("login.html", form=form)
登入表格:

from flask_wtf import FlaskForm 
from wtforms.fields import StringField, PasswordField, BooleanField,           SubmitField
from wtforms.validators import DataRequired, url, Length, Email, Regexp,     EqualTo, ValidationError

from models import User    
class LoginForm(FlaskForm):
    username = StringField('Your Username: ', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired()])
    remember_me = BooleanField("Keep me logged in")
    submit = SubmitField('Log In')
用户模型:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password_hash = db.Column(db.String(80))

您可以在自己的
User
类中实现该代码,并查看它是否解决了您的问题,您正在使用函数覆盖属性。这样
user.is\u authenticated
将返回函数对象,而不是所需的布尔值。在Python中,如果可能的话,通常会跳过函数getter/setter。所以只要删除getter函数就可以了,而且
users
对象在代码中的任何地方都没有定义。它可能是打字错误,也可能是由*imports导入的。我说不清楚。这就是为什么您应该避免*导入的原因。@MrLeeh我试图删除getter函数,但仍然不起作用。用户对象确实来自配置。您从Flask获得了什么信息?
登录请求是否以代码200完成?您的代码是否一直运行到
login\u user
或以前在某个地方失败?客户端是否收到设置Cookie头的响应?@Destiner是的,我总是收到200代码。用户登录并没有真正失败。什么也没发生。地址栏中的链接显示。但是重定向不起作用,当我转到/main/时,我被重定向回登录页面。谢谢。我以前没听说过。我会调查的。不客气。如果你有其他问题,尽管问我