小工具知识网

当前位置: 首页 > 行业知识 > Python-flask项目入门

行业知识

Python-flask项目入门

2026-10-30 08:00:00 来源:互联网转载

一、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,而需要直接写成utf8SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,                        DATABASE)SQLALCHEMY_TRACK_MODIFICATIONS = FalseSQLALCHEMY_ECHO = True# 加载密钥key_access = '&^_^&protect*py_&^_^&'

3、引用orm框架 访问数据库

/mapper/exts.py

from flask_sqlalchemy import SQLAlchemydb = 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_requestdef before():    key = str(request.headers.get('TOKEN'))    if key != format(config.key_access):        return 'Password error'    else:        passif __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//')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/')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/')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_等语法。

  1. data = UserInfo.query.filter(UserInfo.name=='1').all()

  2. 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()

6、分页对象

  • has_prev/has_next——是否有上一页/下一页

  • Items——当前页的数据列表

  • prev_num/next_num——上一页/下一页的页码

  • total——总记录数

  • pages——总页数

    @user.route('/loadUserPage//')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 userapp = 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, jsonuser = 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_requestdef 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才可以正常访问该接口

     

上一篇:怎么在成都市官网上查备案价格呢

下一篇:电脑主机散热风扇响声太大了怎么解决