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: 用于查询简单的列名,不支持比较运算符

filterfilter_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/<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才可以正常访问该接口

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python Flask是一种轻量级的Web框架,它可以帮助开发者快速构建Web应用程序。本书《Python Flask Web开发入门项目实战》介绍了Flask的基础知识和实践技巧,包括路由、模板、表单、数据库、认证、部署等方面。此外,本书还提供了多个实战项目,如博客、电子商务、社交网络等,帮助读者深入理解Flask的应用场景和开发流程。对于想要学习Python Flask开发者来说,这是一本非常实用的入门指南。 ### 回答2: Python Flask是一种基于Python语言的轻量级Web框架,它具有易学易用、灵活、可扩展性强、速度快等特点,因此在Web开发领域有着广泛的应用。Python Flask提供了许多简单易用的工具和方法,使得开发者能够轻松地构建Web应用程序。本文旨在介绍Python Flask的基础知识和实践项目,帮助初学者快速上手并实现简单的Web应用程序。 Python Flask Web开发入门: 1. Flask的安装与使用:首先需要安装Python Flask库,可以使用pip安装,安装完成后即可使用Flask构建Web应用。 2. Flask路由和视图函数:Flask路由是URL到视图函数的映射,基于路由可以添加多个视图函数,以实现不同的功能。Flask的视图函数是一个Python函数,它处理来自Web客户端的请求,并返回响应结果。 3. Flask模板和静态文件:Flask支持使用模板引擎来构建Web页面,通常使用Jinja2模板引擎。另外,Flask还支持使用静态文件,如CSS、JavaScript和图片等,以优化Web页面的展示效果。 4. Flask表单:Flask支持使用表单来接收来自Web客户端的数据,包括GET和POST请求。开发者可以使用Flask-WTF库来实现表单验证和数据的处理。 Python Flask Web开发项目实战: 1. 论坛网站:使用Flask实现一个简单的论坛网站,包括用户注册、登录、发帖和评论等功能。前端可以使用Bootstrap框架。 2. 个人博客:使用Flask和SQLAlchemy实现一个个人博客网站,包括文章展示、评论、分类和标签等功能。 3. 电子商务网站:使用FlaskFlask-RESTful实现一个电子商务网站,包括商品展示、购物车、订单和支付等功能。前端可以使用React框架。 总之,Python Flask是一个功能强大而易用的Web框架,对于Web开发初学者来说,学习和掌握它是非常重要的。在实践项目中,不断地提升自己的实战经验,才能更好地掌握Python Flask的使用和应用。 ### 回答3: Python Flask是一种轻量级的Web应用程序框架,其用途是帮助Web开发人员更轻松地构建Web应用程序。如果您想学习Python Flask Web开发,以下是一些重要方面: 首先,需要了解Python Flask的基本概念和架构,以及如何安装、配置和运行Flask应用程序。可以在官方网站或在线学习网站上学习这些内容。 其次,需要学习Python Flask的路由(routing)功能,了解如何为不同的URL路径配置不同的代码处理程序,以及如何从请求对象(request object)中获取并处理相关数据。 进一步,需要了解Python Flask的框架能够支持各种Web表单,需要掌握如何使用Flask的表单功能和模板引擎,以及如何渲染HTML页面以及处理表单数据。 另外,还需要熟悉处理静态文件的方法和技术,例如CSS、JavaScript和图像等。 最后,要通过实际项目来练习和巩固所学知识。可以使用Python Flask构建博客、社交媒体平台或电子商务网站等应用程序。 需要注意的是,要成为一名成功的Python Flask Web开发人员,需要在学习过程中不断提升自己的编码技能以及学习新技术。同时,也需要具备良好的沟通能力和团队协作能力,以配合其他开发者共同完成项目的构建。 总之,学习Python Flask Web开发需要投入充足的时间和精力,逐步掌握语言、框架和技术,并通过实践来提高自己的技能和能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值