初识flask模板
注意点:
文件结构
__init__.py 配置文件
截图:
代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CSRFProtect as CsrfProtect
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:////Flaskproject/SchoolProject/School/school.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.config["SECRET_KEY"] = "581927364401"
CsrfProtect(app)
db = SQLAlchemy(app)
models.py 数据库模型
截图:
代码:
from School import db
class User(db.Model):
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(32))
password = db.Column(db.String(32))
email = db.Column(db.String(32))
def __repr__(self):
return self.username
templates/register.html 前端显示静态模板
截图:
代码:
<h2 style="color: red">{{ error }}</h2>
<form class="user" method="post">
<div class="form-group row">
<div class="col-sm-12 mb-3 mb-sm-0">
<input type="text" class="form-control form-control-user" id="username" placeholder="用户名" name="username">
</div>
</div>
<div class="form-group row">
<div class="col-sm-12 mb-3 mb-sm-0">
<input type="email" class="form-control form-control-user" id="email" placeholder="邮箱" name="email">
</div>
</div>
<div class="form-group row">
<div class="col-sm-12 mb-3 mb-sm-0">
<input type="password" class="form-control form-control-user" id="password" placeholder="密码" name="password">
</div>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input value="注册" type="submit" class="btn btn-primary btn-user btn-block">
</form>
views.py 视图文件
from School import app
from flask import render_template,request
from School.forms import StudentForm
from School.models import User,db
import hashlib
session = db.session # 数据库实例化
@app.route("/")
def index(): # 测试函数
return "hello world"
def set_password(password): # 密码哈希加密的方法
md5 = hashlib.md5()
md5.update(password.encode())
result = str(md5.hexdigest())
return result
@app.route("/register",methods=["POST","GET"])
def register(): # 跳转注册页面
error = ""
if request.method == "POST":
data = StudentForm(request.form)
if data.validate():
clean_data = data.data # 字典
user = User(
username=clean_data["username"],
email=clean_data["email"],
password=set_password(clean_data["password"])
)
session.add(user)
session.commit()
error = "success"
else:
error = data.errors
return render_template("register.html",error = error)
forms.py 校验文件
from flask_wtf import FlaskForm as Form
import wtforms
from wtforms import validators
from School.models import User
class EmailValider(): # 校验邮箱格式
def __init__(self,message):
self.message = message
def __call__(self, form, field):
data = field.data
user = User.query.filter_by(email = data).all() # .all 变成列表
if not user:
return None
raise validators.ValidationError(self.message)
class StudentForm(Form): # 校验整个表单
username = wtforms.StringField("用户姓名",validators=[
validators.length(min=6,max=8,message="用户名必须是6到8位"),
validators.Regexp(regex=r"[0-9a-zA-Z]{6,8}",message="用户名只能是数字字母下划线")
])
password = wtforms.StringField("用户密码",validators=[
validators.length(min=6,max=8,message="密码必须是6到8位")
])
email = wtforms.StringField("用户邮箱",validators=[
EmailValider(message="该邮箱已被占用!"),
validators.Regexp(regex=r"\[email protected]\w+\.\w+",message="邮箱格式错误!")
])
manage.py 运行文件
from School.views import app
from School.models import db
db.create_all() # 执行创建
if __name__ == "__main__":
app.run(host="10.10.65.138",port=80,debug=True) # 运行文件 主机 端口号 debug模式
运行: