栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

【Flask介绍】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号