1. 程式人生 > >Flask wtforms實現簡單的登錄註冊

Flask wtforms實現簡單的登錄註冊

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 import
simple,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))
users

模板

技術分享圖片
<!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實現簡單的登錄註冊