一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比

1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用得到用不到,反正它全都有,属于全能型框架

2.Tornado 主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架

3.Flask 主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架

Django 通常用于大型Web应用由于内置组件足够强大所以使用Django开发可以一气呵成

Tornado 通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批

Flask 通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用

Django 优点是大而全,缺点也就暴露出来了,这么多的资源一次性全部加载,肯定会造成一部分的资源浪费

Tornado 优点是异步,缺点是干净,连个Session都不支持

Flask 优点是精悍简单,缺点可能就是你不会!

Flask打印我们万能的HelloWorld

pip install Flask

一篇博客带你入门Flask

Flask中的HttpResponse Render Redirect

HttpResponse

一篇博客带你入门Flask

在Flask 中的HttpResponse 在我们看来其实就是直接返回字符串

Redirect

一篇博客带你入门Flask

render(render_template)

Flask里面的render对应的是render_template

一篇博客带你入门Flask

后面直接跟html文件名,只要改html文件建在同目录下的templates文件夹中,会自动匹配

一篇博客带你入门Flask

Flask处理函数返回值的其他类型方法

jsonify

类似与Django里面的JsonResponse,返回json序列化后的数据,在Flask项目中需要对数据进行序列化传输时,用这个比json.dumps要好很多

send_file

返回文件类型的数据(图片、视频等)

一篇博客带你入门Flask

注意注意:一定要注意,用jsonify序列化数据时,数据格式必选严格满足json格式,单引号的字符串也不行,它不像json在序列化时会将单引号变成单引号。而它不行!

 

Flask中的request对象

一篇博客带你入门Flask

methods=["POST"]  代表这个url地址对应的视图函数只允许 POST 请求,是个列表也就是意味着可以允许多重请求方式,例如GET之类的

 request.method

与Django里面的方法一致,获取本次请求的请求方式

request.form

获取前端用form表单提交过来的数据

print(request.form)  # ImmutableMultiDict([('user', 'Oldboy'), ('pwd', 'DragonFire')])
    # ImmutableMultiDict 它看起来像是的Dict 就用Dict的方法取值试一下吧
    print(request.form["user"])  # Oldboy
    print(request.form.get("pwd"))  # DragonFire
    # 看来全部才对了, ImmutableMultiDict 似乎就是个字典,再来玩一玩它
    print(list(request.form.keys()))  # ['user', 'pwd'] 看来是又才对了
 

request.args

获取url中传递过来的所有参数值

一篇博客带你入门Flask

然后会在控制台中看到 ImmutableMultiDict([('id', '1'), ('age', '20')]),获取到的数据直接当作字典进行操作即可

request.args 与 request.form 的区别就是:

  request.args 是获取url中的参数

  request.form 是获取form表单中的参数

request.values

只要是参数,无论是post过来的还是get过来我全部接受

print(request.values)  # CombinedMultiDict([ImmutableMultiDict([('id', '1'), ('age', '20')]), ImmutableMultiDict([('user', 'Oldboy'), ('pwd', 'DragonFire')])])
print(request.values.get("id"))  # 1
print(request.values["user"])  # Oldboy
# 这回喜欢直接操作字典的小伙伴们有惊喜了! to_dict() 方法可以直接将我们的参数全部转为字典形式
print(request.values.to_dict()) # {'user': 'Oldboy', 'pwd': 'DragonFire', 'id': '1', 'age': '20'}

同样获取到的数据直接当成一个大字典进行操作即可

注意啦!注意啦!

# 注意这里的坑来啦! 坑来啦!
# 如果url和form中的Key重名的话,form中的同名的key中value会被url中的value覆盖
# http://127.0.0.1:5000/req?id=1&user=20
print(request.values.to_dict())  # {'user': 20 'pwd': 'DragonFire', 'id': '1'}

 request.headres

用来获取本次请求的请求头

print(type(request.headers))
    """
    Host: 127.0.0.1:5000
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://127.0.0.1:5000/home
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 26
    Cookie: csrftoken=vDIozqveCEfArdYXlM6goHVlSQEn7h4bDygNphL2Feas60DiM2di0jlqKfxo7xhA
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    """
获取请求头

相关文章:

  • 2020-05-12
  • 2018-09-21
  • 2022-01-08
  • 2021-12-25
  • 2021-10-26
  • 2021-11-12
  • 2021-06-04
  • 2020-12-29
猜你喜欢
  • 2022-01-02
  • 2023-03-11
  • 2022-12-23
  • 2022-12-23
  • 2021-04-25
  • 2022-12-23
  • 2021-08-28
相关资源
相似解决方案