【Flask介绍】

介绍

Flask是一个基于Python开发并且依赖jinja2模板(DTL)和Werkzeug WSGI(符合wsgi协议的web服务器,wsgiref)服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

下载安装

pip install flask

python使用flask

在这里插入图片描述
在这里插入图片描述

app.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


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

flask的配置

flask配置文件写法很多种

    # 第一种写法
    app.secret_key='asfasdf'
    app.debug=True

    # 第二种:app所有的配置项都在app.config这个字典中
    app.config['DEBUG']=True
    print(app.config)

    # 第三种:仿django的settings.py 写法
    app.config.from_pyfile('settings.py')
    print(app.config['NAME'])

    # 第四种:通过类的方式
    app.config.from_object('settings.DevelopmentConfig')
    print(app.config)

    # 其他:
    app.config.from_envvar("环境变量名称")
    app.config.from_json("json文件名称")

flask的路由

flask 路由写法:基于装饰器,跟djagno有区别,本质其实是一样的,sanic,fastapi就是这种路由方式

flask路由和djagno路由的区别?
  1. 在django中,路由是浏览器访问服务器时,先访问的项目中的url,再由项目中的url找到应用中url, 这些url是放在一个列表里,遵从从前往后匹配的规则。

  2. 在flask中,路由是通过装饰器给每个视图函数 提供的,而且根据请求方式的不同可以一个url用于不同的作用。

flask的路由:

@app.route('/index', methods=['GET'], endpoint='index')
def index():
    return 'hello'

Django的路由:

urlpatterns = [
	path('admin/', admin.site.urls),
	
]

toute源码分析

‘’’
#1 装饰器 @route python特殊语法糖,会把下面的函数当参数传入 order=route(order) 以后调用order本质就是在执行route(order)()

#2 route的内层函数---->本质是self.add_url_rule(rule, endpoint, f, **options)
def decorator(f):
endpoint = options.pop(“endpoint”, None)
self.add_url_rule(rule, endpoint, f, **options)
return f

#3 self是app对象,add_url_rule 其实就Flask类的add_url_rule方法

#4 所以我们可以不使用装饰器来注册路由,而自己写
app.add_url_rule(‘/order/string:pk’,view_func=order)
app.add_url_rule(‘/index’,view_func=index)
‘’’

add_url_rule参数

参数

	-rule:请求的路径,可以使用转换器
    -endpoint:别名--》反向解析
    -view_func:视图类.as_view(name='xx')(视图函数内存地址)
    -methods:允许的请求方式
    # ---------以下不重要-----
    -defaults:字典,给视图函数传默认值
    -strict_slashes:对URL最后的 / 符号是否严格要求
    -redirect_to

默认转换器

'default':          UnicodeConverter,
'string':           UnicodeConverter,
'any':              AnyConverter,
'path':             PathConverter,
'int':              IntegerConverter,
'float':            FloatConverter,
'uuid':             UUIDConverter, 

请求响应

@app.route('/login.html', methods=['GET', "POST"])
def login():
    ####请求对象的属性和方法
    # request:是全局的request,用起来就当是每个请求都有一个request即可
    print(request.method) # 请求方式
    print(request.args) # get 请求参数
    print(request.form) # post提交的数据
    print(request.values)  # get,post提交的数据总和

    print(request.cookies)  # cookies
    print(request.headers)  # 请求头
    print(request.path)  # 路径
    print(request.full_path)  # 全路径
    print('-----',request.script_root)
    # request.url           带域名带参数的请求路径
    print(request.url)      # 带服务器地址的全路径
    # request.base_url		带域名请求路径
    print(request.base_url)  # 不带地址的全路径
    # request.url_root      域名
    print(request.url_root)   # 域名+端口
    # request.host_url		域名
    print(request.host_url)  # 域名+端口
    # request.host
    print(request.host)    # 不带http的域名+端口
    from werkzeug.datastructures import FileStorage
    print(type(request.files.get('files')))

响应对象

##1  向浏览器中写入cookie,四件套都可以使用make_response包裹一下变成响应对象
    res=make_response(render_template('home.html'))
    res.set_cookie('name','lqz')
    # delete_cookie  #  删除cookie
## 2 向浏览器中写响应头
res.headers['X-Something'] = 'A value'
 return res
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值