Flask项目实战-用户登录功能

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.测试登录

登录成功可以跳转到首页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值