Flask12 數據庫連接、創建數據庫用戶、注冊模塊


 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:182838@127.0.0.1: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的表

    

 

3 創建數據庫用戶

  補充:創建數據庫

    CREATE DATABASE `數據庫名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  3.1 為mysql創建用戶

       create user 'fury'@'%' identified by '182838';

  3.2 為指定用戶設定權限

       grant all on test_login.* to 'fury'@'%';
              fury這個用戶對test_login數據庫中的所有表都有權限  

  3.3 刷新權限        

    flush privileges;  

  3.4 安裝的MySQL用戶信息        

     root 182838
        fury 182838

  3.5 注意

    只用root用戶才有權限創建用戶

    好像 mysql5.7 過后就不能用這種方法創建用戶啦

    

 

 

 

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 本博客源代碼

  點擊前往

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM