Flask+Mysql的实例操作

项目结构,没有提到的不需要

一:html

首先是前端页面,在templates目录下,效果是登陆信息保存到Mysql数据库,代码先呈上

<!DOCTYPE html>
<html lang="en">
    <body>
        <h1> Hello, please sign up! </h1>
        <form method="POST" action="/">
            {{ form.csrf_token }}
            {{ form.name.label }} {{ form.name(size=20) }}
            {{ form.email.label }} {{ form.email(size=20) }}
            {{ form.psw.label }} {{ form.psw(size=8) }}
            <input type="submit" value="Go">
        </form>
    </body>
</html>

二:app.py

主应用,没什么好说的

app.config['SECRET_KEY'] = 'AASDFASDF' #密钥,防御CSRF攻击
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI  # 数据库信息
app.config['SQLALCHEMY_TRACK_MODIFICALTIONS'] = True  # 不开启会告警
db.init_app(app) # 初始化数据库
migrate = Migrate(app, db)  # 数据库迁移 :1:flask db init  2:flask db migrate -m '内容说明'  3:flask db upgrade  

数据库迁移在后面细说

自定义一个密码加密算法:

#jiami.py
from hashlib import md5
def jiami(txt1,txt2):
    m1 = md5(txt1.encode())
    m2 = md5(txt2.encode())
    res = m1.hexdigest().encode()+m2.hexdigest().encode()
    return res
import datetime
from flask_migrate import Migrate
from flask import Flask, render_template, redirect, url_for
from forms import SignupForm  # 表单信息
from models import Signups, Userinfo  # 数据库表记录
from database import db, DB_URI  # 数据库配置
from jiami import jiami  # 密码加密

app = Flask(__name__)
app.config['SECRET_KEY'] = 'AASDFASDF'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICALTIONS'] = True
db.init_app(app)
migrate = Migrate(app, db)  # 数据库迁移 :1:flask db init  2:flask db migrate -m '内容说明'  3:flask db upgrade


@app.route("/", methods=('GET', 'POST'))
def signup():
    form = SignupForm()
    if not form.validate_on_submit():  # 空表单
        return render_template('signup.html', form=form)
    user = db.session.query(Userinfo).filter(Userinfo.name == form.name.data).first()  # 查询一个
    if user:  # 该用户存在
        password = jiami(form.name.data, form.psw.data).decode()
        if user.password != password:
            return redirect(url_for('fail'))  # 密码错误
        else:
            return redirect(url_for('success'))  # 登陆
    else:  # 该用户不存在
        signup = Signups(name=form.name.data, email=form.email.data, date_signed_up=datetime.datetime.now())
        password = jiami(form.name.data, form.psw.data).decode()
        userinfo = Userinfo(name=form.name.data, password=password)
        db.session.add(signup)
        db.session.add(userinfo)
        db.session.commit()
        return redirect(url_for('success'))  # 注册并登录


@app.route("/success")
def success():
    return "登陆成功!"


@app.route("/fail")
def fail():
    return "密码错误!"


if __name__ == '__main__':
    app.run()

三:form.py

与前端表单数据交互的接口在form.py,里面需要用到wtforms,用表单对象的形式传递数据

from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
from wtforms import StringField


class SignupForm(FlaskForm):
    name = StringField('name', validators=[DataRequired()])
    email = StringField('email', validators=[DataRequired()])

以对象的形式把参数传到前端,

前端:{{ form.name.label }} {{ form.name(size=20) }}
form是app.py中响应的的参数:
form = SignupForm()
render_template('signup.html', form=form)
其内容是表单对象,
form:name = StringField('name', validators=[DataRequired()])

四:database.py

配置数据库的信息,然后把参数传递到app.py进行初始化。这边只是配置数据库信息。

注意:不能在这边初始化数据库,初始化数据库需要调用app = Flask(__name__),这个是不能重复调用的

from flask_sqlalchemy import SQLAlchemy

"""
链接mysql数据库
"""

# 数据库配置
HOSTNAME = '127.0.0.1' #host
PORT = '3306' 
DATABASE = 'test'
USERNAME = 'root'
PASSWORD = '密码'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
db = SQLAlchemy()

五:models.py

采用的是ORM模型,需要导入数据库。这里只是进行数据的封装,具体对封装后数据的操作同样实在app.py。根据需求创建字段。

from database import db

"""
ORM模型
"""


class Signups(db.Model):
    __tablename__ = 'signups'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(256))
    email = db.Column(db.String(256), unique=True)
    date_signed_up = db.Column(db.DateTime())


class Userinfo(db.Model):
    __tablename__ = 'userinfo'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(256))
    password = db.Column(db.String(256))

以上就是这些内容。完成后需要进行数据库迁移。

在终端下进行下面三步操作:

flask db init

flask db migrate -m '内容说明'

flask db upgrade

结束后数据库就创建完成了。项目也可以启动了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值