Python flask项目入门教程
作者:无敌小田田
一、flask对于简单搭建一个基于python语言-的web项目非常简单
二、项目目录
示例代码 git路径
三、代码介绍
1、安装pip依赖
通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql
2.配置数据源 config.py
DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME = 'root' PASSWORD = '123456' HOST = '127.0.0.1' PORT = '3306' DATABASE = 'tgcrm' # mysql 不会认识utf-8,而需要直接写成utf8 SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE) SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ECHO = True # 加载密钥 key_access = '&^_^&protect*py_&^_^&'
3、引用orm框架 访问数据库
/mapper/exts.py
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
4、启动文件 app.py
from flask import Flask # 引用数据库启动文件 from mapper.exts import db # 引用数据库配置文件 import config # 引用数据库 from controller.user_controller import * app = Flask(__name__) app.config.from_object(config) db.init_app(app) app.register_blueprint(user, url_prefix="/user") # 全局拦截器校验token @app.before_request def before(): key = str(request.headers.get('TOKEN')) if key != format(config.key_access): return 'Password error' else: pass if __name__ == '__main__': app.run(host='0.0.0.0', port=8060)
5、数据库操作
通过Flask提供orm框架对数据库进行操作
5.1增加
# 添加 http://127.0.0.1:5000/user/add/2/1 @user.route('/add/<username>/<pwd>') def add_user(username, pwd): print(username, pwd) userinfo = User(username=username, pwd=pwd) db.session.add(userinfo) db.session.commit() # # 接受前端发来的数据 # data = json.loads(request.form.get('data')) # # # lesson: "Operation System" # # score: 100 # lesson = data["lesson"] # score = data["score"] # # # 自己在本地组装成Json格式,用到了flask的jsonify方法 # info = dict() # info['name'] = "pengshuang" # info['lesson'] = lesson # info['score'] = score # return jsonify(info) return jsonify("ADD_SUCCESS")
5.2删除
@user.route('/delete/<int:id>') def delete_user(id): print(id) # 第一种 user1 = User.query.filter().first() print(user1.id) db.session.delete(user1) db.session.commit() # 第二种 user2 = User.query.filter(User.id == 2).delete() db.session.commit() return jsonify("DELETE_SUCCESS")
5.3修改
@user.route('/update/<int:id>') def update_user(id): user1 = User.query.filter(User.id == id).first() user1.username = "我是修改后的" db.session.merge(user1) db.session.commit() return jsonify("UPDATE_SUCCESS")
5.4查询
@user.route('/list') def list_users(): users = User.query.all() print(users) users_output = [] for user in users: users_output.append(user.to_json()) return jsonify(users_output)
5.5条件查询
1.filter_by和filter
两种写法根据版本的不同:
filter_by
: 用于查询简单的列名,不支持比较运算符
filter
比filter_by
的功能更强大,支持比较运算符,支持or_
、in_
等语法。
data = UserInfo.query.filter(UserInfo.name=='1').all()
data = UserInfo.query.filter_by(name='1').all()
1. 根据用户名查询符合条件的第一条数据
User.query.filter_by(username=username).first()
print("查询1:", user1.to_json())
2. 查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.username.endswith('g')).all()
User.query.filter(User.username.contains('g')).all()
3. 查询名字不等于wang的所有数据[2种方式]
from sqlalchemy import not_
注意了啊:逻辑查询的格式:逻辑符_(类属性其他的一些判断)
User.query.filter(not_(User.username=='yang')).all()
User.query.filter(User.username!='yang').all()
4. 查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
User.query.filter(and_(User.username.startswith('li'), User.email.startswith('li'))).all()
User.query.filter(User.username.startswith('li'), User.email.startswith('li')).all()
5. 查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.pwd=='123456', User.email.endswith('tiantian.com'))).all()
6. 查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
7. 查询name为liu的角色数据 关系引用
# 举例 暂时没有
User.query.filter_by(username='liu').first().role.name
8.获取第一条记录
User.query.first()
————————————————
版权声明:本文为CSDN博主「无敌小田田」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36602951/article/details/132123744
6、分页对象
- has_prev/has_next——是否有上一页/下一页
- Items——当前页的数据列表
- prev_num/next_num——上一页/下一页的页码
- total——总记录数
- pages——总页数
@user.route('/loadUserPage/<int:page>/<int:per_page>') def list_user(page, per_page): """ 用户分页 """ # 每一页的数据大小-per_page 页码-page # 1. 查询用户信息 user = User.query # 2. 准备分页的数据 print(page, per_page) user_page_data = user.paginate(page, per_page=per_page) users_output = [] for user in user_page_data.items: users_output.append(user.to_json()) print("当前页的数据列表", users_output) print("是否有上一页", user_page_data.has_prev) print("是否下一页", user_page_data.has_next) print("上一页的页码", user_page_data.prev_num) print("下一页的页码", user_page_data.next_num) print("总记录数", user_page_data.total) print("总页数", user_page_data.pages) return jsonify(users_output) """ 输出 当前页的数据列表 [{'pwd': '2', 'id': 2, 'username': '2', 'nick': '2'}] 是否有上一页 True 是否下一页 True 上一页的页码 1 下一页的页码 3 总记录数 7 总页数 7 """
四、多模块配置 蓝图blueprint
在app项目中引用,可以在app中声明多个路径 /user、/admin 、/customer等等
from controller.user_controller import user app = Flask(__name__) app.config.from_object(config) db.init_app(app) app.register_blueprint(user, url_prefix="/user")
在子应用中声明 controller/user_controller
from flask import Blueprint, jsonify, request, json user = Blueprint('user', __name__) # 查询全部 http://127.0.0.1:5000/user/list @user.route('/list') def list_users(): users = User.query.all() print(users) users_output = [] for user in users: users_output.append(user.to_json()) return jsonify(users_output)
五、统一过滤器
在app.py文件加入前置过滤器
# 引用配置文件 import config # 全局拦截器校验token @app.before_request def before(): key = str(request.headers.get('TOKEN')) if key != format(config.key_access): return 'Password error' else: pass
配置文件包括
# 加载密钥 key_access = '&^_^&protect*py_&^_^&'
此时通过postman访问接口,会对header进行请求头校验,不满足请求直接被打回
直接当携带了TOKEN=xxxx才可以正常访问该接口
到此这篇关于Python flask项目入门的文章就介绍到这了,更多相关Python flask入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!