Flask12 数据库连接注册模块

Posted 寻渝记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 本博客源代码

  点击前往

 

以上是关于Flask12 数据库连接注册模块的主要内容,如果未能解决你的问题,请参考以下文章

Flask 学习-70.Flask-RESTX 注册接口实例

Flask模拟NRF

怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面

怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面

Flask博客实战 - 实现登录注册功能

12_关于flask中的宏