在昨天的基础上 ,今天将flask实际应用 创建一个注册界面 先展示一下效果
这个是基于前端界面的修改,使用后台程序存储用户注册的一系列数据,没有html样式的小伙伴可以直接自己写简单的登录,我将代码奉上!!
首先 创建项目文件夹 ,里面创建 __init__.py forms.py view.py models.py manage.py 几个文件,引入样式和html文件
在__init__.py (初始化文件)中,导入所需的模块和配置
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
from flask_wtf.csrf import CSRFProtect as CsrfProtect
app = Flask(__name__) #实例化FLASK应用(可以当做是创建一个app)
BaseDir = os.path.join( #查询当前所在目录
os.path.dirname(
os.path.abspath(__file__)
),
"school.db"
).split("\\", 1)[1]
db_path = "sqlite:////" + BaseDir.replace("\\", "/") #进行目录拼接
app.config["SQLALCHEMY_DATABASE_URI"] = db_path #进行app配置
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.config["SECRET_KEY"] = "123123123"
CsrfProtect(app)
db = SQLAlchemy(app)
接下来我们将manage.py作为项目的执行文件,代码如下
from School.views import app
from School.models import db
db.create_all()
app.run()
之后再models.py文件中创建我们的数据模型,基于此来修改前端界面
from School import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32))
email = db.Column(db.String(32))
password = db.Column(db.String(32))
def __repr__(self):
return self.username
然后我们用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
if not user:
return None
raise validators.ValidationError(self.message)
class UserForm(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="用户名必须是6-8的数字,字母,下划线"),
])
email = wtforms.StringField("用户邮箱", validators=[
validators.Regexp(regex=r"\w+@\w\.\w+", message="邮箱格式错误"),
EmailValider(message="邮箱重复")
])
password = wtforms.StringField("密码", validators=[
validators.length(min=6, max=8, message="密码必须大于6位小于8位")
])
最后我们将在获取前端用户输入的数据(views.py中)
import hashlib
from flask import request
from flask import render_template
from School import app
from School.forms import UserForm
from School.models import User, db
session = db.session
def setPassword(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 = UserForm(request.form)
if data.validate():
clean_data = data.data
user = User(
username=clean_data["username"],
password=setPassword(clean_data["password"]),
email=clean_data["email"],
)
session.add(user)
session.commit()
error = "success"
else:
error = data.errors
return render_template("register.html", error=error)
执行项目文件,取得的是前端界面,一开始的图片
用户点击注册之后将数据存到数据库