from flask import Blueprint, render_template, url_for, request, redirect, jsonify, session, flash
from extions import mail
from flask_mail import Message
import string
import random
from models import EmailCaptchaModel, PersonDataModel
from extions import db
from blueprints.forms import RegisterForm, LoginForm
from models import UserModel
from werkzeug.security import generate_password_hash, check_password_hash
# from decorator import login_required
# blue 访问.../auth/login
bp = Blueprint("auth", __name__, url_prefix="/")
# 程序实例需要知道每个url请求所对应的运行代码是谁。
# 所以程序中必须要创建一个url请求地址到python运行函数的一个映射。
# 处理url和视图函数之间的关系的程序就是"路由",在Flask中,路由是通过@app.route装饰器(以@开头)来表示的
# get获取服务器数据,post上传数据到服务器
# 127.0.0.1:5000
@bp.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
form = LoginForm(request.form)
if form.validate():
username = form.username.data
password = form.password.data
user = UserModel.query.filter_by(username=username).first()
if not user:
print("用户名不在数据库中")
return redirect(url_for("auth.login"))
if check_password_hash(user.password, password):
# cookie:
session['user_id'] = user.id
return redirect(url_for("auth.index"))
else:
print("密码错误")
return redirect(url_for("auth.login"))
else:
print(form.errors)
flash('用户未注册或密码错误!')
return redirect(url_for("auth.login"))
# get获取服务器数据,post上传数据到服务器
@bp.route("/register", methods=['GET', 'POST'])
def register():
# 验证用户提交的邮箱和验证码是否正确
# 表单验证:flask_wtf:wtforms
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)) # password=generate_password_hash(password)加密
db.session.add(user)
db.session.commit()
print(f'注册信息:用户名:{username}密码:{password}邮箱:{email}')
return redirect(url_for(".login"))
else:
print(f"错误信息{form.errors}")
return redirect(url_for(".register"))
@bp.route("/captcha/email")
def get_email_captcha():
# 路径传参:/captcha/email/<email>
# /captcha/email?email=xxx@qq.com
username = request.args.get("username")
print(username)
email = request.args.get("email")
print(email)
# 验证码4/6位,随机,字母,数字
source = string.digits * 4 # digits = '0123456789'
captcha = random.sample(source, 4) # ['2', '6', '8', '9']
captcha = "".join(captcha) # 2689
message = Message(subject="验证码", recipients=[email], body=f"你的验证码是:{captcha}")
mail.send(message)
# 应该把验证码存到缓存中如:memcached/redis
# 用数据库的方式,坏处速度慢
email_captcha = EmailCaptchaModel(username=username, email=email, captcha=captcha)
db.session.add(email_captcha)
db.session.commit()
return jsonify({"code": 200, "message": "", "data": None})
# @bp.route("/mail_test")
# def mail_test():
# message=Message(subject="邮箱测试",recipients=["2646394509@qq.com"],body="这是一条测试信息")
# mail.send(message)
# return "success"
# #
@bp.route('/index')
# @login_required
def index():
return render_template('index.html')
@bp.route('/home_page', methods=['GET', 'POST'])
# @login_required
def home_page():
image_url = f"assets/img/us/avatar ({random.randint(1, 13)}).jpg"
if request.method == 'GET':
return render_template('pages-profile.html', image_url=image_url)
else:
person_form = request.form
person = PersonDataModel(Company=person_form['Company'], phone_num=person_form['phone_num'],
first_name=person_form['first_name'],
last_name=person_form['last_name'], addr=person_form['addr'], city=person_form['city'],
postcode=person_form['postcode'], country=person_form['country'],
introdution=person_form['introdution'])
db.session.add(person)
db.session.commit()
return render_template('pages-profile.html', image_url=image_url)
hgjhhgg
- 粉丝: 2
- 资源: 1
最新资源
- 电脑公司财务管理系统 SSM毕业设计 源码+数据库+论文(JAVA+SpringBoot+Vue.JS).zip
- 操作系统课程设计:基于Proc文件系统的进程树打印与内核信息访问
- 操作系统课程设计:Linux内核添加系统调用实验
- 几何平均谱分割经验小波变在轴承故障诊断中的应用 程序运行环境为MATLAB r2021b, 经验小波变(EWT)使用自适应小波细分方案从而创建信号的多分辨率分析 (MRA),我在科研中用的较多,是一种
- Creo8.0产品结构设计-配套资料包
- Linux虚拟文件系统(VFS)原理及实验案例分析
- 多线程同步机制与生产者消费者问题的C语言实现-互斥锁、条件变量及Posix信号量的应用
- 2022年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- Matlab simulink仿真 太阳能光伏系统搭建 包含有功、无功模块、3-2变等 通过改变id、iq数值可得出不同的波形,图2为纯有功,a相电压于相电流重合;图3为纯无功时,a相电压与a相电流
- 西门子博途1200 1500PLC多段曲线控温 (支持40段 控温曲线、曲线断电重启自动搜索、暂停、跳段等功能)
- 2021年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- MATLAB代码:基于元模型优化的电厂主从博弈优化调度模型 关键词:元模型 电厂 主从博弈 优化调度 参考文档:《基于元模型优化算法的主从博弈多电厂动态定价和能量管理》复现元模型 仿真平台:MATLA
- 基于模型的六轴机器人阻抗力控制算法(matlab simscape,机器人模型可),视频中红色为期望轨迹,黑色为实际轨迹,工程可一键运行,可学到机器人阻抗力控制算法以及通过m文件设置simulink参
- 北京邮电大学数电实验自拟题目
- ABAQUS 、Opensees、Perform3d IDA曲线绘制,结构易损性评估 地震波选波调幅,易损性分析,曲线生成代码matlab函数,直接调用即可
- 基于51单片机的电机转速测量系统.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈