1. 程式人生 > >Flask12 數據庫連接、註冊模塊

Flask12 數據庫連接、註冊模塊

csr lang 數據庫連接 sta 使用 valid 數據庫 通過 length

1 連接數據庫

  1.1 安裝 flask-sqlalchemy

    flask-sqlalchemy 會讓 sqlalchemy 使用起來更加方便

    pip3 install flask-sqlalchemy

    註意:如果網速比較慢可以換源(換成豆瓣的源)

  1.2 導入 SQLAlchemy

    from flask_sqlalchemy import SQLAlchemy

  1.3 導入密碼加密函數和密碼檢查函數

    from werkzeug.security import generate_password_hash, check_password_hash

  

  1.4 創建sqlalchemy接口

    db = SQLAlchemy()

  1.5 編寫實體類以及相關方法  

技術分享
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = users
    id = db.Column(db.String(36), primary_key=True)
    email 
= db.Column(db.String(50), unique=True) name = db.Column(db.String(50), nullable=False) password = db.Column(db.String(200), nullable=False) def __init__(self, id, email, name, password): # 類似與java中的構造器 self.id = id self.email = email self.name = name self.password
= password def set_password(self, password): # 對明文密碼進行加密,返回的是加密後的密碼 return generate_password_hash(password) def check_password(self, password): # 檢查密碼,傳入的是明文密碼,會將明文密碼進行加密後再進行比對 return check_password_hash(self.password, password) def change_password(self, password): # 修改密碼 self.password = self.set_password(password)
View Code

  1.6 在全局配置文件中配置數據連接

技術分享
DB_CONFIG = {
    DRIVER: pymysql,
    USER: fury,
    PASSWORD: 182838,
    HOST: 127.0.0.1,
    PORT: 3306,
    NAME: test_login,
    NAME: test_login,
    CHARSET: utf8
}
SQLALCHEMY_DATABASE_URI = mysql+pymysql://fury:[email protected]:3306/test_login?charset=utf8
# SQLALCHEMY_DATABASE_URI = ‘mysql+{DRIVER}://{USER}:{PASSWORD}@{HOST}:{PORT}/{NAME}?charset={CHARSET}‘.format(**DB_CONFIG);
View Code

  1.7 在Flask應用中註冊sqlalchemy

    db.init_app(app) # 註冊sqlalchemy

  1.8 編寫數據庫初始化函數

    該函數只在服務器第一次接收到請求時執行

    技術分享

  1.9 啟動服務器,隨便訪問一個路徑

    在數據庫中自動創建一個名為users的表

    技術分享

2 註冊模塊

  2.1 編寫登陸表單 

技術分享
class RegistForm(FlaskForm):
    name = StringField(
        label=昵稱,
        validators=[
            InputRequired(昵稱不能為空)
        ]
    )
    email = StringField(
        label=郵箱,
        validators=[
            InputRequired(郵箱不能為空),
            Email(郵箱格式錯誤)
        ]
    )
    password = PasswordField(
        label=密碼,
        validators=[
            InputRequired(密碼不能為空),
            Length(6, 9, 密碼長度是6到9)
        ]
    )
    confirm = PasswordField(
        label=確認,
        validators=[
            InputRequired(密碼不能為空),
            EqualTo(password, 兩次密碼不一致)
        ]
    )
View Code

  2.2 通過GET方式發起註冊請求

    渲染請求表單

 技術分享

技術分享
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>註冊模塊</title>
</head>
<body>
    <h4>這是註冊模塊</h4>
    <hr />
    <div>
        <form action="/regist/" method="post">
            <div>
                <input type="hidden" name="csrf_token" value="{{ gen_token() }}" />
{#                <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />#}
            </div>
            <div>
                {{ form.name.label }}:{{ form.name() }}
            </div>
            <div>
                {{ form.email.label }}:{{ form.email() }}
            </div>
            <div>
                {{ form.password.label }}:{{ form.password() }}
            </div>
            <div>
                {{ form.confirm.label }}:{{ form.confirm() }}
            </div>
            <div>
                <button type="submit">註冊</button>
            </div>
        </form>
    </div>
</body>
</html>
View Code

  2.3 錄入完註冊信息後,以POST方式發起註冊請求

    驗證註冊格式信息,以及註冊信息合法性

 技術分享

3 本博客源代碼

  點擊前往

Flask12 數據庫連接、註冊模塊