import bdb
from flask import Blueprint, render_template, jsonify,redirect,url_for,session
from werkzeug.security import generate_password_hash, check_password_hash
from blueprints.forms import RegisterForm,LoginForm
from exts import mail, db
from flask_mail import Message
from flask import request
import string
import random
from models import EmailCaptchaModel
from models import UserModel
# 前缀
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 render_template("auth.login")
if check_password_hash(user.password,password):
# cookie:
# cookie中不适合存储大量信息,一般存储登录信息
# flask中的session,是经过加密后存储在cookie中的
session['user_id']=user.id
return redirect("/")
else:
print("密码错误")
return render_template("auth.login")
else:
print(form.errors)
return render_template("auth.login")
@bp.route("/register",methods=['GET','POST'])
def register():
# 验证用户提交验证码是否对应
# 表单验证flask_wft
if request.method=='GET':
return render_template("register.html")
else:
form=RegisterForm(request.form)
if form.validate():
email=form.email.data
username=form.username.data
password=form.password.data
user=UserModel(email=email,username=username,password=generate_password_hash(password))
db.session.add(user)
db.session.commit()
#return redirect("/auth/login")
return redirect(url_for("auth.login"))
else:
print(form.errors)
return redirect(url_for("auth.register"))
@bp.route("/logout")
def logout():
session.clear()
return redirect("/")
@bp.route("/captcha/email")
def get_email_captcha():
# /captcha/email/<email>
# /captcha/email?email=xx@qq.com
email = request.args.get("email")
source = string.digits * 4
captcha = random.sample(source, 4)
captcha = "".join(captcha)
message = Message(subject="验证码", recipients=[email], body=f"验证码为:{captcha}")
mail.send(message)
# memcached存在内存中/redis可同步到内盘
# 数据库存储(速度缓慢)
email_captcha = EmailCaptchaModel(email=email, captcha=captcha)
db.session.add(email_captcha)
db.session.commit()
# restful api
# code:200正常,400异常,错误message:”“,data{}
return jsonify({"code": 200, "message": "", "data": None})
@bp.route("/mail/test")
def mail_test():
message = Message(subject="邮箱测试", recipients=["2633087186@qq.com"], body="测试邮件")
mail.send(message)
return "邮件发送"
python-flask实现问答平台
需积分: 0 15 浏览量
更新于2023-12-28
2
收藏 124KB ZIP 举报
python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台python——flask实现问答平台
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
kinggnu_
- 粉丝: 0
- 资源: 1
最新资源
- 【JCR一区级】飞蛾扑火算法MFO-Transformer-GRU负荷数据回归预测【含Matlab源码 6312期】.zip
- 【JCR一区级】多元宇宙算法MVO-Transformer-GRU负荷数据回归预测【含Matlab源码 6311期】.zip
- 【JCR1区】豪猪算法CPO-CNN-SVM故障诊断分类预测【含Matlab源码 5791期】.zip
- 【SCI1区】混沌博弈优化算法CGO-Transformer-GRU故障诊断分类【含Matlab源码 6266期】.zip
- 【SCI1区】减法平均优化算法SABO-Transformer-GRU故障诊断分类【含Matlab源码 6267期】.zip
- 【独家首发】蜣螂算法DBO优化Transformer-BiLSTM负荷数据回归预测【含Matlab源码 6568期】.zip
- 【独家首发】人工蜂群算法ABC优化Transformer-BiLSTM负荷数据回归预测【含Matlab源码 6570期】.zip
- 【独家首发】人工蜂鸟算法AHA优化Transformer-BiLSTM负荷数据回归预测【含Matlab源码 6569期】.zip
- 【独家首发】蚁狮算法ALO优化Transformer-LSTM负荷数据回归预测【含Matlab源码 6411期】.zip
- 【JCR一区级】蝠鲼觅食算法MRFO-Transformer-GRU负荷数据回归预测【含Matlab源码 6314期】.zip
- 【JCR一区级】非洲秃鹫算法AVOA-Transformer-GRU负荷数据回归预测【含Matlab源码 6313期】.zip
- 【独家首发】海洋捕食者算法MPA优化Transformer-LSTM负荷数据回归预测【含Matlab源码 6376期】.zip
- 【独家首发】黏菌算法SMA优化Transformer-BiLSTM负荷数据回归预测【含Matlab源码 6566期】.zip
- 【独家首发】蝗虫算法GOA优化Transformer-BiLSTM负荷数据回归预测【含Matlab源码 6553期】.zip
- 【JCR1区】黑猩猩算法Chimp-CNN-SVM故障诊断分类预测【含Matlab源码 5792期】.zip
- 【JCR一区级】哈里斯鹰算法HHO-Transformer-GRU负荷数据回归预测【含Matlab源码 6316期】.zip