下载Flask版本
Flask==1.1.4
Flask-Caching==1.10.1
Flask-Cors==3.0.10
Flask-Migrate==2.7.0
Flask-RESTful==0.3.9
Flask-Script==2.0.6
Flask-SQLAlchemy==2.5.1
MarkupSafe==2.0.1
PyJWT==2.3.0
PyMySQL==1.0.2
qiniu==7.6.0
redis==4.2.2
SQLAlchemy==1.4.27
Flask-Cors==3.0.10
配置问价setting.py
class Config:
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123@127.0.0.1:3306/flask_2"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
JSON_AS_ASCII = False
REDIS_HOST = "127.0.0.1"
REDIS_PASSWORD = "123" #MYSQL密码
REDIS_PORT = "6379" #MYSQL端口
入口文件main.py
from create_flask import create_app
from settings.setting import Config
app = create_app(Config)
#
if __name__ == '__main__':
app.run(debug=True)
工厂方法文件create_app
from flask import Flask
from flask_cors import CORS
from flask_migrate import Migrate
from models.model import db
from views.user import blue1
def create_app(config):
flask_app = Flask(__name__)
flask_app.config.from_object(config)#读取配置文件
CORS(flask_app)#跨域,只需配置这一个所有跨域问题解决
Migrate(flask_app,db)#迁移
db.init_app(flask_app)
flask_app.register_blueprint(blue1) #注册蓝图
return flask_app
model.py文件
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True,comment="id")
username = db.Column(db.String(50),nullable=False,comment="用户名")
password = db.Column(db.String(256),nullable=False,comment="密码")
phone = db.Column(db.String(11),unique=True,nullable=False,comment="手机号")#unique唯一
view.py文件
import string
import redis
from flask import Blueprint, jsonify, Response, request
from flask_restful import Api, reqparse
from models.model import User, db
import re
import random
from captcha.image import ImageCaptcha
blue1 = Blueprint("blue1",__name__)
api = Api(blue1)
#校验用户名是否重复
@blue1.route("/users/check/username/<name>/")
def check_username(name):
try:
user = User.query.get(User.username == name)
except:
return jsonify({
"code":200,
"msg":"用户名可以使用"
})
return jsonify({
"code":400,
"msg":"用户名重复"
})
#校验手机号
@blue1.route("/users/check/mobile/<mobile>/")
def check_mobile(mobile):
print("手机号",mobile)
#1.验证手机号是否满足规则
#手机号以1开头,第二位3-9之间的数字,长度为11,之允许数字
if not re.findall(r"^1[3-9]\d{9}$",mobile):
return jsonify({
"code":204,
"msg":"手机号不合法"
})
#2.根据手机号查询用户,如果能查询到用户,说明已经注册则手机号不能在注册
user_query_set = User.query.filter(User.phone == mobile).first() #为什么不加first?????
print("------",user_query_set)
# print("-----------+",user_query_set.first())
if not user_query_set:
return jsonify({
"code":200,
"msg":"手机号可以正常注册"
})
return jsonify({
"code":204,
"msg":"手机号已经注册"
})
#生成图片验证码
@blue1.route("/users/image_code/<image_code_id>/")
def create_Img(image_code_id):
alpha_number = string.ascii_lowercase + string.digits
sms_img_code = "".join(random.sample(alpha_number,4)) #sample随机取
print("验证码是",sms_img_code)
#2.生成画布
img_cap = ImageCaptcha()
#把验证码放入画布中
img_code = img_cap.generate(sms_img_code)
# 存入redis中
key = "sms_code" + image_code_id
r = redis.Redis(password=123)
r.set(key, sms_img_code, ex=300)
r.close()
return Response(img_code,mimetype="image/ong")
#校验图片验证码
@blue1.route("/users/check_image_code/")
def check_image_code():
uuid = request.args.get("imageCodeID")
input_code = request.args.get("imageCode")
print("前端的uuid",uuid)
key = "sms_code" + uuid
r = redis.Redis(password=123)
code = r.get(key)
# print("]]]]]]]]]]]]",code)
# print("//",type(code))
if not code:
return jsonify({
"code":400,
"msg":"验证码已经过期"
})
if code.decode() == str(input_code):
return jsonify({
"code":200,
"msg":"验证码校验成功"
})
else:
return jsonify({
"code":400,
"msg":"验证码错误"
})
@blue1.route("/users/register/",methods=["POST"])
def register_user():
req = reqparse.RequestParser()
req.add_argument("userName")
req.add_argument("pwd")
req.add_argument("mobile")
req.add_argument("agree")
args = req.parse_args()
if not all([args['userName'],args['pwd'],args['mobile'],args['agree']]):
return jsonify({
"code":204,
"msg":"用户信息不完整"
})
try:
#注册用户
user = User(username=args['userName'], password=args['pwd'], phone=args['mobile'])
db.session.add(user)
db.session.commit()
return jsonify({
"code":200,
"msg":"用户注册成功"
})
except Exception as e:
return jsonify({
"code":400,
"msg":"用户注册失败"
})
迁移数据库的命令
flask db init
flask db migrate
flask db upgrade
如果是manage.py脚本做的迁移
python manage.py db init
python manage.py db migrate
python manage.py db upgrade