Flask - 第一篇 安装,仪式, 返回, 和 请求

我们每学一个框架, 总会将他与其他框架作比较

Django web框架:

优点 - 组件非常全,教科书框架,admin model-ORM session

缺点 - 资源浪费,因为组件多,大,还是互相关联的,随便卸载组件,可能会造成项目的崩溃

Flask web框架:

优点 - 扩展性强,精简小,简单,第三方组件 session Flask-Session Flask-Admin

缺点 - 稳定性相对较差 ,第三方组件新版兼容性

Tornado web框架:

优点 - 异步IO,非阻塞,原生Websocket

缺点 - 全部手写

Sanic web框架:

优点 - 与Flask本是同根生,异步框架,集合Flask与Tornado所有优点

缺点 - 复杂度较高

一. Flask 的安装 和 程序员仪式

安装

pip install Flask

也可以在Pycharm中选择安装~

程序员仪式

启动app.py下

from flask import Flask       # 带入Flask类

app = Flask(__name__)         # 实例化Flask对象 app

@app.route('/')               # app中的路由装饰器
def hello_world(): # 视图函数
return 'Hello World!' if __name__ == '__main__':
app.run(debug=True) # 启动服务

浏览器访问127.0.0.1:5000, 就会完成Flask的程序员仪式, 欢迎你成为一个Flask用户!!!

二. Flask 的返回值

1.return HttpResponse("辉哥真帅!")

	# 跟django中一样, 直接返回字符串

2.return render_template("login.html")

	# 返回一个html模板,类似django中 render

	@app.route('/login')
def login():
return render_template('login.html')

3.return redirect("/")

	# 与django中相同, 重定向

4.return send_file("美女.mp4")

	# 打开并返回文件内容 自动识别文件类型 并且加入 Content-type:文件类型

5.return jsonify({"key": "value"})

	# 返回标准格式的jsonz字符串, 在响应头中加入Content-type:application

三. Flask 请求request

1.request.method

	# 返回请求的方式, post,get...

2.request.form

	# 返回Form表单中传递传过来的值

	print(request.form)  # ImmutableMultiDict([('user', 'kong'), ('pwd', 'hui')])

    # ImmutableMultiDict 它看起来像是的Dict 就用Dict的方法取值试一下吧
print(request.form["user"]) # kong
print(request.form.get("pwd")) # hui # 看来全部才对了, ImmutableMultiDict 似乎就是个字典,再来玩一玩它
print(list(request.form.keys())) # ['user', 'pwd'] 看来是又才对了 #如果以上所有的方法你都觉得用的不爽的话
req_dict = dict(request.form)
print(req_dict) # 如果你觉得用字典更爽的话,也可以转成字典操作(这里有坑)

3.request.args

	# 返回url中传递的参数

例如:

然后我们看下:

print(request.args)  # ImmutableMultiDict([('id', '1'), ('age', '20')])

print(request.args["id"])  # 1

print(request.args.get("age"))  # 20

print(list(request.args.keys()))  # ['id', 'age']

print(list(request.args.values()))  # ['1', '20']

req_dict = dict(request.args)  # {'id': ['1'], 'age': ['20']}

与 request.form的区别:

  • request.args 是获取url中的参数

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

4.request.values

前段代码:

看返回结果:

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'}

5.request.cookies

	# 返回浏览器中的cookies信息

6.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
"""

7.request.data

	# b""
存放的是请求体中的原始信息 Content-Type:asdfkjashgjvajhgjkow

8.request.json

	# 请求头中存在 Content-Type:application/json 将请求体中的数据 存放在JSON中,没有返回None

9.request.files

如果遇到文件上传的话,request.files 里面存的是你上传的文件,但是 Flask 在这个文件的操作中加了一定的封装,让操作变得极为简单.

前段代码:



后端:

 	print(request.files)  # ImmutableMultiDict([('file', <FileStorage: 'DragonFire.txt' ('text/plain')>)])
print(request.files["file"]) # <FileStorage: 'DragonFire.txt' ('text/plain')>
my_file = request.files["file"]
my_file.save("OldBoyEDU.txt") # 保存文件,里面可以写完整路径+文件名

10.request获取路径

# 获取当前的url路径
print(request.path)# /req # 当前url路径的上一级路径
print(request.script_root) # # 当前url的全部路径
print(request.url) # http://127.0.0.1:5000/req # 当前url的路径的上一级全部路径
print(request.url_root ) # http://127.0.0.1:5000/

Flask - 安装,仪式, 返回, 和 请求的更多相关文章

  1. Flask初学者:Python虚拟环境,Flask安装,helloworld,run方法

    一.Python虚拟环境: 作用:使Python框架的不同版本可以在同一台电脑上运行.如果在电脑上全局(C盘或者其他目录)安装Flask(或其他Python框架),当你使用其他版本的Flask(比如有 ...

  2. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  3. python flask安装

    windows环境上,打开命令行,输入pip  list  检查列表中是否安装过flask 安装flask命令:pip install flask 出现Successfully installed等提 ...

  4. flask中的上下文_请求上下文和应用上下文

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  5. flask安装及第一个程序

    1.flask是一个轻量级的python web框架 ·1.Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 套件 ·2.安装: # easy_install fla ...

  6. status 返回当前请求的http状态码

    status属性返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取.完整的HTTP状态码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 ...

  7. Flask安装配置

    倒腾了一下午了,还是不太顺利,顺便记录一下. 硬件环境:win8.1 64位 + python2.7.9 32位 安装easy_install 需要先下载ez_setup.py(需要复制该链接中的内容 ...

  8. 【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数

    一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redi ...

  9. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

随机推荐

  1. uva10152-ShellSort

    Problem D: ShellSort He made each turtle stand on another one's back And he piled them all up in a n ...

  2. new (C# Reference)

    https://msdn.microsoft.com/en-us/library/51y09td4.aspx In C#, the new keyword can be used as an oper ...

  3. git 命令 —— checkout

    git checkout 会重写工作区.check in 常常表示酒店入住,则 check out 就表示结账(检查)离开. 1. 基本用法 Git学习笔记04–git checkout git ch ...

  4. shell脚本-高级变量

    shell脚本-高级变量 字符串变量切片 ${#var}: 返回字符串变量var的长度 ${var:offset}: 返回字符串变量var中从第offset个字符后(不包括第offset 个字符)的字 ...

  5. PCB genesis方槽加内角槽孔实现方法

    一.为什么方槽孔加内角孔 如下图,客户来的方槽或Slot槽有内角尺寸要求,通常直接钻一个Slot槽孔内角是不能满足客户要求的,这时我们做CAM的需采用小钻刀进行处理.加内角孔或内角槽的方式进行处理了. ...

  6. 虫食算 2004年NOIP全国联赛提高组(dfs)

    1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...

  7. JavaScript(JS)的简单使用

    一.什么是JS(Javascript)? Javascript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加各式各样的功能,为用户提供更加流畅的浏览效果. Javascript严格区分大小 ...

  8. 一种高兼容性的JavaBean序列化方案

    在对JavaBean做序列化时,我们可能在某些场景希望前后兼容性好一些.比如所有的javaBean都序列化后保存在数据库,用的时候需要反序列化创建.随着业务的发展,数据模型可能会进行变更,那么原来的数 ...

  9. Codeforces 792D

    题意:给定一棵拥有n个节点的满二叉树(即n==2^x-1),q个查询,每次给出一个节点的编号,再给出一个由L,R,U组成的字符串序列,依次表示向左子节点.右子节点.父节点移动,如果移动不合法,则忽略. ...

  10. D3.js 力导向图(气泡+线条+箭头+文字)

    <!DOCTYPE html> <meta charset="utf-8"> <style> .link { fill: none; strok ...