Flask wtforms實現簡單的登錄註冊
阿新 • • 發佈:2019-02-28
close sed type src rep eve com zh-cn sca
目錄結構
視圖
# -*- coding:utf-8 -*- # Author : Niuli # Data : 2019-02-27 19:26 from flask import render_template from flask import request from flask import session from flask import views from flask import Blueprint from wtforms import Form,validators,widgets from wtforms.fields importuserssimple,core user_bp = Blueprint(‘user_bp‘,__name__) # class User(views.MethodView): def get(self): return ‘hello‘ user_bp.add_url_rule(‘/‘, view_func=User.as_view(name=‘index‘)) class LoginForm(Form): username = simple.StringField( label=‘用戶名:‘, validators=[ validators.DataRequired(message=‘用戶名不能為空‘), validators.Length(min=4,max=8,message=‘用戶名不符合規定(大於4位且小於8位)‘), ] ) password = simple.PasswordField( label=‘密碼:‘, validators=[ validators.Length(min=3,max=8,message=‘密碼不能小於3位或大於8位‘), validators.DataRequired(message=‘密碼不能為空!‘) ] ) class Login(views.MethodView): def get(self): login_form = LoginForm() return render_template(‘login.html‘, loginform=login_form) def post(self): # 校驗 user_info = LoginForm(request.form) # 如果校驗成功 if user_info.validate(): session[‘user‘] = user_info.data.get(‘username‘) return str(session[‘user‘]) return render_template(‘login.html‘,loginform=user_info) user_bp.add_url_rule(‘/login‘, view_func=Login.as_view(name=‘login‘)) class RegForm(Form): username = simple.StringField( label=‘用戶名: ‘, validators=[ validators.DataRequired(message=‘用戶名不能為空‘), ], render_kw={‘class‘: ‘my_class‘} # 更改標簽class ) pwd = simple.PasswordField( label=‘密碼: ‘, validators=[ validators.DataRequired(message=‘密碼不能為空‘), validators.Length(min=4,max=8) ] ) repwd = simple.PasswordField( label=‘確認密碼: ‘, validators=[ validators.EqualTo(‘pwd‘,message=‘兩次密碼不一致‘) ] ) gender = core.SelectField( label=‘性別: ‘, choices=( (1,‘男‘), (2,‘女‘) ), default=1, coerce=int ) email = simple.StringField( label=‘郵箱: ‘, validators=[ validators.Email(message=‘郵箱格式有誤!‘) ] ) hobby = core.SelectMultipleField( label=‘愛好: ‘, choices=( (1,‘吃‘), (2,‘喝‘), (3,‘玩‘), (4,‘樂‘) ), coerce=int, default=(1,2) ) class Regist(views.MethodView): def get(self): reg_info = RegForm() print(‘*‘*88) return render_template(‘reg.html‘,re=reg_info) def post(self): reg_info = RegForm(request.form) if reg_info.validate(): return ‘註冊成功!‘ return render_template(‘reg.html‘,re=reg_info) user_bp.add_url_rule(‘/reg‘,view_func=Regist.as_view(name=‘reg‘))
模板
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="content-Type" charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <div id="app"> <form action="" method="post" novalidate> <p>{{ loginform.username.label }}{{ loginform.username }}{{ loginform.username.errors[0] }}</p> <p>{{ loginform.password.label }}{{ loginform.password }}{{ loginform.password.errors.0 }}</p> <button>18??</button> </form> </div> <script> //<!-- 組件創建 --> //<!--組件註冊--> </script> </body> </html>login
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="content-Type" charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <div id="app"> <form action="" method="post" novalidate> {% for foo in re %} <p>{{ foo.label }}{{ foo }}{{ foo.errors.0 }}</p> {% endfor %} <button> ?????? </button> </form> </div> <script> //<!-- 組件創建 --> //<!--組件註冊--> </script> </body> </html>reg
App中的__init__文件
from flask import Flask from flask_session import Session from redis import Redis from session_wtforms.views.users import user_bp def create_app(): app = Flask(__name__,template_folder=‘templates‘) app.config[‘DEBUG‘] = True app.config[‘SESSION_TYPE‘] = ‘redis‘ app.config[‘SESSION_REDIS‘] = Redis() app.config[‘SESSION_COOKIE_NAME‘] = ‘SESSION名字‘ Session(app) app.register_blueprint(user_bp) return app程序中的__init__.py
manage
from session_wtforms import create_app app = create_app() if __name__ == ‘__main__‘: app.run(debug=True,port=9808)
wtforms組件 (需pip3安裝)
導入
from wtforms import Form,validators,widgets from wtforms.fields import simple,core
應用
class RegForm(Form): username = simple.StringField( label=‘用戶名: ‘, validators=[ validators.DataRequired(message=‘用戶名不能為空‘), ], render_kw={‘class‘: ‘my_class‘} # 更改標簽class ) pwd = simple.PasswordField( label=‘密碼: ‘, validators=[ validators.DataRequired(message=‘密碼不能為空‘), validators.Length(min=4,max=8) ] ) repwd = simple.PasswordField( label=‘確認密碼: ‘, validators=[ validators.EqualTo(‘pwd‘,message=‘兩次密碼不一致‘) ] ) gender = core.SelectField( label=‘性別: ‘, choices=( (1,‘男‘), (2,‘女‘) ), default=1, coerce=int ) email = simple.StringField( label=‘郵箱: ‘, validators=[ validators.Email(message=‘郵箱格式有誤!‘) ] ) hobby = core.SelectMultipleField( label=‘愛好: ‘, choices=( (1,‘吃‘), (2,‘喝‘), (3,‘玩‘), (4,‘樂‘) ), coerce=int, default=(1,2) )
校驗
def post(self): reg_info = RegForm(request.form) #獲取校驗數據 if reg_info.validate(): #如果校驗成功 return ‘註冊成功!‘ return render_template(‘reg.html‘,re=reg_info)
Flask wtforms實現簡單的登錄註冊