1.登录页面渲染
更改login.html,继承base.html的代码,只保留登录相关的代码
{% extends "base.html" %}
{% block title %}问答平台-登录{% endblock %}
{% block body %}
<div class="row mt-4">
<div class="col"></div>
<div class="col">
<form action="#" method="POST">
<div class="form-group">
<label for="exampleInputEmail1">邮箱</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">密码</label>
<input type="password" name="password" class="form-control" id="exampleInputPassword1">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block">立即登录</button>
</div>
</form>
</div>
<div class="col"></div>
</div>
{% endblock %}
更改auth.py中login函数中的返回
@bp.route("/login")
def login():
return render_template("login.html")
测试下登录页面
http://127.0.0.1:5000/auth/login
2.登录逻辑实现
在forms.py中创建登录验证表单
class Loginform(wtforms.Form):
email = wtforms.StringField(validators=[Email(message="邮箱格式错误!")])
password = wtforms.StringField(validators=[Length(min=6, max=20, message="密码格式错误!")])
更改auth.py中,login函数
from flask import Blueprint,render_template,jsonify,redirect,url_for,session
from exts import mail,db
from flask_mail import Message
from flask import request
import string,random
from models import EmailCaptchaModel,UserModel
from .forms import Registerform,Loginform
from werkzeug.security import generate_password_hash,check_password_hash
# /auth
bp = Blueprint("auth",__name__,url_prefix="/auth")
@bp.route("/login",methods=['GET','POST'])
def login():
if request.method == "GET":
return render_template("login.html")
else:
form = Loginform(request.form)
if form.validate():
email = form.email.data
password = form.password.data
user = UserModel.query.filter_by(email=email).first()
if not user:
print("邮箱在数据库中不存在!")
return redirect(url_for("auth.login"))
#检查密码是否正确
if check_password_hash(user.password,password):
#存储session
#flask中的session,是经过加密后存储到cookie中的
session['user_id'] = user.id
return redirect("/")
else:
print("密码错误!")
return redirect(url_for("auth.login"))
else:
print(form.errors)
return redirect(url_for("auth.login"))
更改login.html中form的POST地址
不增加递增就是默认向当前地址发送POST请求
<form method="POST">
更改qa.py中首页的返回
@bp.route("/")
def index():
return "首页"
3.测试登录
登录成功可以跳转到首页