Flask基础内容

Flask 框架

一、 简介

1、 框架介绍

Flask是一个基于Python并且依赖于Jinja2模板引擎和Werkzeug WSGI 服务的一个微型框架
WSGI :Web Server Gateway Interface(WEB服务网关接口),定义了使用python编写的web app与web server之间接口格式

其他类型框架:

  1. Django:比较“重”的框架,同时也是最出名的Python框架。包含了web开发中常用的功能、组件的框架(ORM、Session、Form、Admin、分页、中间件、信号、缓存、ContenType…),Django是走大而全的方向,最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

  2. Tornado:大特性就是异步非阻塞、原生支持WebSocket协议;

  3. Flask: 一个轻量级的基于 Python 的 Web 框架

  4. Bottle:是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。

2、 架构模式

Flask的架构模式-MTV

  1. 经典三层结构 :MVC模式
    • M :Models ,模型层,负责数据库建模
    • V :Views,视图层,用于处理用户显示的内容,如 :html
    • C :Controller,控制器,处理与用户交互的部分内容。处理用户的请求并给出响应
  2. python常用:MTV模式
    • M :Models ,模型层,负责数据库建模
    • T :Templates ,模板层,用于处理用户显示的内容,如:html
    • V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应

3、 环境搭建

  1. 安装

    pip install flask
    
  2. 创建工作目录

    mkdir first_dir  # 创建工作目录
    mkdir first_dir/static  # 创建存放图片、css等不需要动态生成的静态文件
    mkdir first_dir/templates  # 创建存放响应文本的模板文件夹
    touch first_dir/app.py  # 主程序
    
  3. app.py中添加

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')  # Flask路由
    def hello_world():
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()  # 运行网站
    

    主程序会默认访问templatesstatic文件夹,如果,存放web文件的文件夹名称不是这两个,那么要在实例化Flask路由时,声明

flask中文网:https://flask.net.cn/

如果对一些语法有疑问,可以自行访问官网去查看

二、 第一个应用

主程序代码

from flask import (Flask, render_template
, request, redirect, session)

app = Flask(__name__)  # 创建一个服务器
app.secret_key = "ashdjhfcasjcvbgjs"  # 设置盐,对session信息进行加密,随机字符串
app.debug = True  # 当文件保存时,flask服务就重启
USER_DICT = {
   
    "1": {
   "name": "李华", "age": 12},
    "2": {
   "name": "李虎", "age": 13},
}  # 假设这个为用户数据,其为从数据库中读取出来的


@app.route('/login', methods=["GET", "POST"])
def hello_world():
    if request.method == "GET":  # 如果请求方式为get请求
        return render_template("login.html")  # 对静态文件中的文件进行渲染
    user = request.form.get("user")  # 得到表单数据
    pwd = request.form.get("pwd")
    if user == "kun" and pwd == "123":  # 进行判断
        # 用户信息放入session中,默认放入浏览器的cookie中
        session["user_info"] = user
        return redirect("/index")  # 进行重定向
    return render_template("login.html", msg="账号或密码错误,登录失败")  # 如果登录失败,将失败信息传入前端页面中


@app.route("/detail")
def detail():
    user_info = session.get("user_info")
    if not user_info:  # 判断是否登录
        return redirect("/login")  # 如果没有登录,重定向到登录界面
    uid = request.args.get("uid")  # 获取传入的参数
    info = USER_DICT.get(uid)  # 获取人员信息
    return render_template("detail.html", info=info)  # 进行页面的渲染


@app.route("/index")
def index():
    user_info = session.get("user_info")
    if not user_info:  # 如果没有用户信息,则返回登录页面
        return redirect("/login")
    return render_template("index.html", user_dict=USER_DICT)


@app.route("/loginout")
def loginout():
    del session["user_info"]  # 删除cookies信息,进行注销操作
    return redirect("/login")  # 重定向到登录页面


@app.route("/")
def red():  # 如果直接访问的话,默认跳转到登录界面
    return redirect("/index")  # 进行url的跳转


if __name__ == '__main__':
    app.run()

代码详情在:【https://github.com/liuzhongkun1/flask_/tree/main/firstFlask

三、 框架语法

参考文档:【https://www.cnblogs.com/wupeiqi/asticles/7552008.html

1、 框架之配置

# flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
{
   
    'DEBUG': get_debug_flag(default=False),  # 是否开启Debug模式
    'TESTING': False,  # 是否开启测试模式
    'PROPAGATE_EXCEPTIONS': None,                          
    'PRESERVE_CONTEXT_ON_EXCEPTION': None,
    'SECRET_KEY': None,
    'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
    'USE_X_SENDFILE': False,
    'LOGGER_NAME': None,
    'LOGGER_HANDLER_POLICY': 'always',
    'SERVER_NAME': None,
    'APPLICATION_ROOT': None,
    'SESSION_COOKIE_NAME': 'session',
    'SESSION_COOKIE_DOMAIN': None,
    'SESSION_COOKIE_PATH': None,
    'SESSION_COOKIE_HTTPONLY': True,
    'SESSION_COOKIE_SECURE': False,
    'SESSION_REFRESH_EACH_REQUEST': True,
    'MAX_CONTENT_LENGTH': None,
    'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
    'TRAP_BAD_REQUEST_ERRORS': False,
    'TRAP_HTTP_EXCEPTIONS': False,
    'EXPLAIN_TEMPLATE_LOADING': False,
    'PREFERRED_URL_SCHEME': 'http',
    'JSON_AS_ASCII':  True,
    'JSON_SORT_KEYS': True,
    'JSONIFY_PRETTYPRINT_REGULAR': True,
    'JSONIFY_MIMETYPE': 'application/json',
    'TEMPLATES_AUTO_RELOAD': None,
}
 
# 方式一:
app.config['DEBUG'] = True  # PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)

# 方式二:
app.config.from_pyfile("python文件名称")
"""
        如:
            settings.py
                DEBUG = True
 
            app.config.from_pyfile("settings.py")
""" 
app.config.from_envvar("环境变量名称")  # 环境变量的值为python文件名称名称,内部调用from_pyfile方法

app.config.from_json("json文件名称")  # JSON文件名称,必须是json格式,因为内部会执行json.loads

app.config.from_mapping({
   'DEBUG':True})  # 字典格式

app.config.from_object("python类或类的路径")  # 传入一个类
"""
如:
app.config.from_object('pro_flask.settings.TestingConfig')
        settings.py
            class Config(object):
                DEBUG = False
                TESTING = False
                DATABASE_URI = 'sqlite://:memory:'
                
            class ProductionConfig(Config):
                DATABASE_URI = 'mysql://user@localhost/foo'
 
            class DevelopmentConfig(Config):
                DEBUG = True
 
            class TestingConfig(Config):
                TESTING = True
 
        PS: 从sys.path中已经存在路径开始写
    PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录
"""

具体的配置参数请通过官方文档获取

2、 框架之路由

2.1 添加路由
# 第一种
@app.route('/')
def hello_world():
    return 'Hello World!'


# 第二种
def index():
    return "index"

app.add_url_rule("/index", None, index)
2.2 反向生成
from flask import Flask, url_for, redirect

app = Flask(__name__)


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值