app
from flask import Flask
from flask_script import Manager
from App. ext import db
from App. views import blue
app = Flask( __name__)
app. config. from_pyfile( "settings.py" )
db. init_app( app)
manager = Manager( app)
app. register_blueprint( blue)
if __name__ == '__main__' :
manager. run( )
App.ext
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy( )
settings
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:19970223@localhost:3306/sess"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = "i9490kl*(780990HGjhsoid7872378287mn,,.,ghghY!@3"
App.views
from flask import Blueprint, render_template, redirect, request
from App. ext import db
from App. models import User
from App. forms import RegisterForm
import hashlib
blue = Blueprint( "blue" , __name__)
@blue. route( "/register/" , methods= [ 'GET' , 'POST' ] )
def register_user ( ) :
form = RegisterForm( )
if request. method == 'POST' :
if form. validate_on_submit( ) :
username = form. username. data
password = form. password. data
user = User( username= username)
user. password = hashlib. sha1( password. encode( 'utf8' ) ) . hexdigest( )
db. session. add( user)
db. session. commit( )
return redirect( "/" )
return render_template( "register.html" , ** locals ( ) )
App.forms
import re
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms. fields. html5 import EmailField
from wtforms. validators import DataRequired, Length, EqualTo, Email, ValidationError
from App. models import User
def check_phone ( form1, field) :
if not re. match( r'(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$' , field. data) :
raise ValidationError( "电话号码不符合规则" )
class RegisterForm ( FlaskForm) :
username = StringField( "用户名" , validators= [ DataRequired( "用户名必须输入" ) ] )
password = PasswordField( "密码" , validators= [ DataRequired( "密码必须输入" ) , Length( min = 3 , max = 12 , message= "密码长度必须在3-12位" ) ] )
confirm = PasswordField( "确认密码" , validators= [ EqualTo( "password" , message= "两次密码不一致" ) ] )
email = EmailField( "邮箱" , validators= [ Email( "邮箱格式错误" ) ] )
phone = StringField( "电话" , validators= [ check_phone] )
def validate_username ( self, field) :
print ( field. data)
user = User. query. filter ( User. username== field. data) . first( )
if user:
raise ValidationError( "用户名重名" )
return field
App.models
from App. ext import db
class User ( db. Model) :
__tablename__ = 'user'
uid = db. Column( db. Integer, primary_key= True )
username = db. Column( db. String( 30 ) , nullable= False )
password = db. Column( db. String( 128 ) , nullable= False )
gender = db. Column( db. Integer)
register.html
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 用户注册</ title>
< style>
span {
color : red;
}
</ style>
</ head>
< body>
< form action = " " method = " post" >
{{ form.csrf_token }}
< p>
用户名:< input type = " text" name = " username" >
{% for error in form.username.errors %}
< span> {{ error }}</ span>
{% endfor %}
</ p>
< p>
密码:< input type = " password" name = " password" >
{% for error in form.password.errors %}
< span> {{ error }}</ span>
{% endfor %}
</ p>
< p>
确认密码:< input type = " password" name = " confirm" >
{% for error in form.confirm.errors %}
< span> {{ error }}</ span>
{% endfor %}
</ p>
< p>
email: < input type = " text" name = " email" >
{% for error in form.email.errors %}
< span> {{ error }}</ span>
{% endfor %}
</ p>
< p>
电话:< input type = " text" name = " phone" >
{% for error in form.phone.errors %}
< span> {{ error }}</ span>
{% endfor %}
</ p>
< input type = " submit" >
</ form>
</ body>
</ html>