@bp.get(‘/’)
@authorize(“system:dept:main”, log=True)
def main():
return render_template(‘system/dept/main.html’)
然后 统一初始化 api. @ /pear-admin-flask/applications/view/system/\_\_init\_\_.py
from flask import Flask, Blueprint
from applications.view.system.dict import bp as dict_bp
…
system_bp = Blueprint(‘system’, name, url_prefix=‘/system’)
def register_system_bps(app: Flask):
# 在admin_bp下注册子蓝图
system_bp.register_blueprint(user_bp)
…
接下来就可以通过浏览器 GET http://ip:port/system/dept 访问到 pear-admin-flask/applications/view/system/dept.py 中接口函数.
#### 4. flask\_login 登陆管理,
a. 定义用户登陆函数 @ pear-admin-flask/applications/extensions/init\_login.py
@login\_manager.user\_loader
def load\_user(user_id):
from applications.models import User
user = User.query.get(int(user_id))
return user
b. 登陆登出 @pear-admin-flask/applications/view/system/passport.py
from flask_login import current_user, login_user, login_required, logout_user
登录
@bp.post(‘/login’)
def login_post():
…
login_user(user, remember=remember)
…
登出
@bp.post(‘/logout’)
@login_required
def logout():
logout_user()
session.pop(‘permissions’)
return success_api(msg=“注销成功”)
c. 会话管理, 验证是否登陆,没有登陆就禁止访问, @pear-admin-flask/applications/common/utils/rights.py
from flask_login import login_required, current_user
@login_required # 登陆许可修饰器
@wraps(func)
def wrapper(*args, **kwargs):
#### 5. flask\_uploads 用于管理文件上传操作, @ pear-admin-flask/applications/extensions/init\_upload.py
导入
from flask_uploads import UploadSet, IMAGES
定义集合与路径
photos = UploadSet(‘photos’, IMAGES)
def init_upload(app: Flask):
# 关联 app
configure_uploads(app, photos)
使用 photos 在上传接口接收文件 @ pear-admin-flask/applications/view/system/file.py
上传接口
@bp.post(‘/upload’)
@authorize(“system:file:add”, log=True)
def upload_api():
if ‘file’ in request.files:
photo = request.files[‘file’]
mime = request.files[‘file’].content_type
file_url = upload_curd.upload_one(photo=photo, mime=mime)
res = {
"msg": "上传成功",
"code": 0,
"success": True,
"data":
{"src": file_url}
}
return jsonify(res)
return fail_api()
#### 6. flask\_sqlalchemy 数据库管理
这个可以单独写一节, 主要是感觉数据库的内容挺多的,这里看看库的样例, 大致样式如下 @ pear-admin-flask/applications/models/admin\_user\_role.py
from applications.extensions import db
创建中间表
user_role = db.Table(
“admin_user_role”, # 中间表名称
db.Column(“id”, db.Integer, primary_key=True, autoincrement=True, comment=‘标识’), # 主键
db.Column(“user_id”, db.Integer, db.ForeignKey(“admin_user.id”), comment=‘用户编号’), # 属性 外键
db.Column(“role_id”, db.Integer, db.ForeignKey(“admin_role.id”), comment=‘角色编号’), # 属性 外键
)
不明白的可以留言讨论或者自行在百度即可.
#### 7. flask\_marshmallow 可将 SQLAlchemy 数据 转换为 RESTful API 格式 , 具体查看项目 内容 @ pear-admin-flask/applications/extensions/init\_sqlalchemy.py
from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy.query import Query as BaseQuery
from flask_marshmallow import Marshmallow
…
重写 BaseQuery
class Query(BaseQuery):
…
def all_json(self, schema: Marshmallow().Schema):
return schema(many=True).dump(self.all())
def layui\_paginate(self):
return self.paginate(page=request.args.get('page', type=int),
per_page=request.args.get('limit', type=int),
error_out=False)
def layui\_paginate\_json(self, schema: Marshmallow().Schema):
"""
返回dict
“”"
_res = self.paginate(
page=request.args.get(‘page’, type=int),
per_page=request.args.get(‘limit’, type=int),
error_out=False
)
return schema(many=True).dump(_res.items), _res.total, _res.page, _res.per_page
db = SQLAlchemy(query_class=Query)
ma = Marshmallow()
#### 8. flask\_migrate 提供数据库的版本管理等功能
#### 9. flask\_mail 提供邮件发送功能
#### 10. flask\_session 管理会话
#### 11. 我在使用 flask 的时候, 经常 flask\_restx 提供的一些方法, 供大家参考 @ [flask-restx 基于 flask 的 restful 风格的插件]( )
from flask import Flask
from flask_restx import Api, Resource
api = Api()
app = Flask(name)
api.init_app(app)
@api.route(‘/hello’,strict_slashes=False)
class HelloWorld(Resource):
def get(self):
# 如果使用模板的块,需要使用 make_response
# return make_response(render_template(‘index.html’, data=res), 200)
# 使用 jsonify 是为了返回json数据的同时,相比于 json.dumps() 其会自动修改 content-type 为 application/json
# 另外,如果使用 jsonify()的同时,还想自定义返回状态码,可以使用 make\_response(jsonify(data=data), 201)
return jsonify({'hello': 'world'})
def post(self):
pass
def put(self):
pass
def delete(self):
pass
if name == ‘__main__’:
app.run(debug=True)
也可以使用 flask\_restx 提供的参数校验.
from flask_restx import reqparse
def create_reqparse(args):
rp = reqparse.RequestParser()
for i in args:
rp.add_argument(i[0],**i[1])
return rp
create_annotation = create_reqparse([
[‘image_id’,{‘type’:int,‘required’:True,‘location’:‘json’}],
[‘category_id’,{‘type’:int,‘location’:‘json’}]])
@api.route(‘/’)
class AnnotatorData(Resource):
@api.expect(create_annotation)
def post(self):
args = create_annotation.parse_args()
…
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/032dabb70d8966fe71ac69d1f6bad5cf.png)
![img](https://img-blog.csdnimg.cn/img_convert/cd794a98306a01bb772e714146d6fe94.png)
![img](https://img-blog.csdnimg.cn/img_convert/30477efa2c9acf5779457058878c0548.png)
![img](https://img-blog.csdnimg.cn/img_convert/0867c7eaa0a5e78131b92a41321b5aa1.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
1401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
![](https://img-blog.csdnimg.cn/img_convert/57ba5b982523a02513e0b6e1155cbe0e.jpeg)