标签:class out 表名 插件 第三方 get 配置文件 配置参数 settings
在flask项目中,一切功能围绕核心app来完成,这个包就用来构造核心app
settings.py
文件作为项目的配置文件extensions.py
项目的第三方扩展插件__init__.py
定义工厂函数,生成核心app__init__.py
创建蓝图,创建完成后在核心app中注册蓝图models.py
创建模型类views.py
实现逻辑处理settings.py
文件作为项目的配置文件class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = ‘mysql://用户名:密码@IP地址:端口号/数据库名‘
SQLALCHEMY_TRACK_MODIFICATIONS = False
extensions.py
项目的第三方扩展插件from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_cors import CORS
# 环境中,使用 mysqlclient 链接mysql,就可以正常使用
# 如果使用的是pymysql链接 mysql, 就需要加一些配置项
# import pymysql
# pymysql.install_as_MySQLdb()
db = SQLAlchemy()
migrate = Migrate()
cors = CORS()
def config_extensions(app):
db.init_app(app)
migrate.init_app(app, db=db)
cors.init_app(app)
__init__.py
定义工厂函数,生成核心appfrom flask import Flask
from .settings import Config
from .extensions import config_extensions
def create_app():
# 1. 创建APP
app = Flask(__name__)
# 2. 导入配置参数
app.config.from_object(Config)
# 3. 导入 第三方的插件
config_extensions(app)
# 4. 返回APP
return app
from flask_script import Manager,Server
from flask_migrate import MigrateCommand
from app import create_app
# 1.利用工厂函数生成app
app = create_app()
# 2.创建管理对象,管理项目
manage = Manager(app)
# 3.构建命令
manage.add_command(‘runserver‘,Server(host=0.0.0.0,post = 7000))
manage.add_command(‘db‘,MigrateCommand)
if__name__ == ‘__main__‘:
manage.run()
命令
python manage.py runserver # 启动flask 服务
python manage.py db init # 只有第一次迁移时,才会执行 该命令, 执行完,会生成迁移文件
python manage.py db migrate # 生成迁移文件,出路第一次之外,任何修改模型类,都需要 执行该命令, 生成迁移文件
python manage.py db upgrade # 根据迁移文件,生成表
创建子应用的python包
__init__.py
创建蓝图,创建完成后在核心app中注册蓝图from flask.blueprints import Blueprint
school_bp = Blueprint(‘school‘, __name__)
# 为了让蓝图,管理你的 模型类和视图,因此需要导入
from .models import *
from .views import *
models.py
创建模型类from app.extensions import db
# 学生: id、姓名、年龄、性别
class Student(db.Model):
__tablename__ = ‘tb_student‘ # 指定表名
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20))
age = db.Column(db.Integer)
gender = db.Column(db.String(5))
views.py
实现逻辑处理from flask import request
from school import school_bp
from .models import Student
from app.extensions import db
from sqlalchemy.exc import SQLAlchemyError
@school_bp.route(‘/student/‘, methods=[‘POST‘, ‘GET‘])
def student():
# 添加学生 POST student/ 表单参数
if request.method == ‘POST‘:
# 1. 接收参数
name = request.form.get(‘name‘)
age = request.form.get(‘age‘)
gender = request.form.get(‘gender‘)
# 2. 校验参数
if not all([name, age, gender]):
return {‘mgs‘: ‘缺少必要参数‘}, 400
# 3. 存入数据库
# 3.1 创建学生对象成功,得到学生对象
stu = Student(name=name, age=age, gender=gender)
# 3.2 添加到 db 事务中
db.session.add(stu)
# 3.3 提交 事务, 因为,不提交事务之前,数据并没有保存到数据库,不会发生错误
try:
db.session.commit()
except SQLAlchemyError as e:
# print(e)
return {
‘msg‘: ‘添加失败‘
}, 500
# 4. 返回响应
return {
‘id‘: stu.id,
‘name‘: stu.name,
‘age‘: stu.age,
‘gender‘: stu.gender
}, 201
else:
# 1. 查询所有学生,得到查询集
students = Student.query.all()
# 2. 循环遍历查询集,解析数据
data = []
for s in students:
data.append({
‘id‘: s.id,
‘name‘: s.name,
‘age‘: s.age,
‘gender‘: s.gender,
})
# 3. 返回响应
return {‘students‘: data}, 200
视图处理过程中,都是接收请求,处理逻辑,返回响应
flask中
request
对象 不是 局部对象,也不属于某个视图函数,而是在 全局中 拥有同一个 请求对象
GET student/1/
# GET student/1/
@school_bp.route(‘/student/<int:pk>/‘)
def student_detail(pk):
return {
‘id‘: pk
}
列如:GET student/list/?page=3&size=5&a=3&a=9
from flask import request
@student_bp.route(‘student/list/‘)
def student_list():
# 1. 获取查询字符串参数
page = request.args.get(‘page‘) # 根据参数的键获取具体的值
size = request.args.get(‘size‘) # 获取单个值
a = request.args.getlist(‘a‘) # 根据参数的键,获取对应的多个值,格式为列表
return ‘查询第{}页学生数据,每页{}条‘.format(page, size)
POST、PUT可以携带请求体参数,请求体参数包括:表单数据,json数据
在flask视图处理过程中,默认只支持GET请求方式,想要支持其他请求方式,应指明请求方式
@school_bp.route(‘/student/form/‘, methods=[‘POST‘])
def student_create():
name = request.form.get(‘name‘)
age = request.form.get(‘age‘)
gender = request.form.get(‘gender‘)
return {
‘id‘: 1,
‘name‘: name,
‘age‘: age,
‘gender‘: gender
}
@school_bp.route(‘/student/json/‘, methods=[‘POST‘])
def student_json_create():
name = request.json.get(‘name‘)
age = request.json.get(‘age‘)
gender = request.json.get(‘gender‘)
return {
‘name‘: name,
‘age‘: age,
‘gender‘: gender
}, 201
@school_bp.route(‘/student/‘, methods=[‘GET‘, ‘POST‘])
def student():
# 如果请求方式是 GET, 返回学生列表数据
if request.method == ‘GET‘:
page = request.args.get(‘page‘, 1)
size = request.args.get(‘size‘, 5)
return {
‘page‘: page,
‘size‘: size,
‘student‘: [{‘id‘: 1, ‘name‘: "小米"}]
}
# 如果请求方式是POST, 获取请求体参数,保存学生数据,返回响应
else:
name = request.form.get(‘name‘)
age = request.form.get(‘age‘)
gender = request.form.get(‘gender‘)
if not all([name, age, gender]):
return {‘msg‘: ‘缺少必要参数‘}, 400
return {
‘id‘: 1,
‘name‘: name,
‘age‘: age,
‘gender‘: gender
}
标签:class out 表名 插件 第三方 get 配置文件 配置参数 settings
原文地址:https://www.cnblogs.com/history0403/p/14831136.html