回顾

  1. #6行flask
  2. from flask import Flask
  3. app = Flask(__name__)
  4. @app.route("/")
  5. def index():
  6. return "HelloWorld!!"
  7. app.run()

1.response

  1. from flask import render_template,redirect,send_file,jsonify
  2. return =httpresponse
  3. render_template
  4. redirect
  5. 特殊返回值
  6. 1.send_file(文件路径) 打开文件并返回文件内容 Content-Type 文件类型 自动识别
  7. 2.jsonify({k:v}) Content-Type:application/json app.config["JSONIFY_MIMETYPE"]

2.request

  1. request.method 请求方式
  2. request.args url参数
  3. print(request.args.to_dict())#转换成字典
  4. request.form FormData 数据
  5. request.json #请求头 Content-Type:application/json 数据序列化至此
  6. request.data 只要请求体中有内容 b"”
  7. request.files 接收FormData中的文件

3.session

  1. from flask import session
  2. app.secret_key=""
  3. session["user"]="username"

4.路由

  1. 动态参数
  2. @app.route("/detail/<stu_id>")
  3. def detail(stu_id)
  4. 1.endpoint Flask Mapping 路由和视图的指向
  5. 2.methods 允许进入视图函数的请求方式

5.初始化配置

  1. Flask(__name__)
  2. 1.template_folder 模版存放路径
  3. 2.static_folder 静态文件存放路径
  4. 3.static_url_path 金泰文件访问路径

6.config对象 正式测试环境

  1. 2.Flask对象配置
  2. app.config == app.default_config 查看默认配置 配置项
  3.  
  4. class Obj(object):
  5. DEBUG = True
  6.  
  7. app.config.from_object(Obj) # 记住

7.蓝图

  1. Flask蓝图
  2. Blueprint: bp.py
  3. from flask import Blueprint
  4. # 把Blueprint理解为 不能被 Run 的 Flask 对象
  5. bp = Blueprint("bp",__name__,url_prefix="/user")
  6.  
  7. @bp.route("/bp",methods=["GET","Post"])
  8. def my_bp():
  9. return "I am bp in user.py"
  10.  
  11. __init__py
  12. from flask import Flask
  13. from .views import add
  14.  
  15. def create_app():
  16. app=Flask(__name__)
  17. app.register_blueprint(add.add)
  18. return app
  19.  
  20. app.py:
  21. from flask import Flask
  22. from user import bp
  23. from acc import acc
  24. app = Flask(__name__)
  25.  
  26. app.register_blueprint(bp)
  27. app.register_blueprint(acc)
  28.  
  29. if __name__ == '__main__':
  30. app.run(debug=True)

8.特殊装饰器 中间件

  1. @app.before_request # 在请求进入视图函数之前
  2. @app.after_request # 结束视图函数之后,在响应返回客户端之前
  3. def af5(ret):
  4.  
  5. 正常 be1 - be2 - vf - af5 - af4 - af3 - af2 - af1
  6. 异常 be1 - af5 - af4 - af3 - af2 - af1
  7.  
  8. @app.errorhandler(404)
  9. def error404(error_message):

9.CBV

  1. from flask import views
  2.  
  3. class Login(views.MethodView):
  4. def get(self):
  5. pass
  6.  
  7. def post(self):
  8. pass
  9.  
  10. app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))
  11.  
  12. endpoint == as_view(name="login") 中的 "login"

jianjin2 模版

  1. {{}} 引用 执行函数
  2. {%%} 逻辑代码
  3.  
  4. {{ stu_list[0].name }}{{ stu_list.0.age }}
  5. {{ stu_dict }}
  6.  
  7. {% for stu in stu_list %}
  8. <p>{{ stu.name }}{{ stu.get("age") }}{{ stu["gender"] }}</p>
  9. {% endfor %}
  10. #if判断
  11. {% if v["gender"] == "中" %}

  12. {% else %}
  13. {{ v["gender"] }}
  14. {% endif %}
  15.  
  16. 自定义标签simple_tag
  17.  
  18. @app.template_global()#全局使用 可选
  19. def ab(a,b):
  20. return a+b
  21. html中引入
  22. {{ ab(4,4) }}
  23.  
  24. 前端执行html
  25. @app.route("/")
  26. def index():
  27. tag = "<input type='text' name='user' value='xiao'>"
  28. return render_template("index.html",tag=tag)
  29. <body>
  30.  
  31. {{ tag|safe }}
  32.  
  33. </body>
  34.  
  35. 后端执行html
  36. from flask import Markup # 导入 flask 中的 Markup 模块
  37. @app.route("/")
  38. def index():
  39. tag = "<input type='text' name='user' value='xiao'>"
  40. # Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签
  41. markup_tag = Markup(tag)
  42. print(markup_tag,type(markup_tag))
  43.  
  44. return render_template("index.html", tag=markup_tag)
  45.  
  46. 母板
  47. index.html
  48. <body>
  49. <h1>Welcome to My</h1>
  50. <h2>下面的内容是不一样的</h2>
  51. {% block content %}
  52.  
  53. {% endblock %}
  54. <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
  55. <h1>My is Good</h1>
  56. </body>
  57. login.html
  58. {% extends "index.html"%}
  59. {% block content %}
  60. {% endblock %}
  61.  
  62. include jinja2
  63. login.html
  64. <h4>欢迎登陆</h4>
  65. <form>
  66. 用户名:<input type="text" name="user">
  67. 密码:<input type="text" name="pwd">
  68. <input type="submit" value="提交">
  69. </form>
  70.  
  71. index.html 文件中的内容
  72.  
  73. <body>
  74.  
  75. <h1>Welcome to My</h1>
  76.  
  77. {% include "login.html" %}
  78. <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
  79.  
  80. <h1>My is Good</h1>
  81.  
  82. </body>

flask 上下文管理
分为3个阶段
1,请求进来时,将请求相关的数据放入上下问管理中
2,在视图函数中,要去上下文管理中取值
3,请求响应,要将上下文管理中的数据清除

详细点
请求刚进来, 将request,session封装在RequestContext类中,app,g封装在AppContext类中
并通过LocalStack将requesttext和appcontext放local类中
2,视图函数中,通过localproxy-->偏函数-->locastack-->local取值
3,请求响应时,先执行save.session()在各自执行pop(),将local中的数据清楚

http://www.cnblogs.com/zhaopanpan/p/9457343.html

flask 基础语法学习的更多相关文章

  1. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  2. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  3. Python 基础语法学习(第一讲)---类的使用

    [写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...

  4. Java基础语法学习

    Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...

  5. java 基础语法学习01

    Java基础语法 注释 初次使用idea时相关配置 new project ->Empty project->进入页面 再选择file->project structure-> ...

  6. React基础语法学习

    React主要有如下3个特点: 作为UI(Just the UI) 虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法 ...

  7. Go基础语法学习

    Go语言基础 Go是一门类似C的编译型语言,但是它的编译速度非常快.这门语言的关键字总共也就二十五个,比英文字母还少一个,这对于我们的学习来说就简单了很多.先让我们看一眼这些关键字都长什么样: 下面列 ...

  8. Xpath基础语法学习

    背景: 之所以学习Xpath,是因为在学习selenium定位页面元素,总是定位不到元素.为了更好的开展自动化测试,先学习下Xpath. 一:Xpath是什么. 1:Xpath是一门在XML文档中查找 ...

  9. Swift基础语法学习总结一

    1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的. ...

随机推荐

  1. USB_ModeSwitch for Android 7

    USB_ModeSwitch官网: USB_ModeSwitch - Handling Mode-Switching USB Devices on Linux USB_ModeSwitch for A ...

  2. android添加阴影

    android底部增加背景 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns: ...

  3. HBase单机模式部署

    1.上传&解压 2.设置环境变量 3.启用&检验 4.编辑hbase-env.sh 5.编辑hbase-site.xml 6.启动hbase 7.验证 8.启动hbase shell

  4. [20190416]完善shared latch测试脚本2.txt

    [20190416]完善shared latch测试脚本2.txt --//昨天测试shared latch,链接:http://blog.itpub.net/267265/viewspace-264 ...

  5. mssql2008 r2 修改默认端口

    1.点击“开始”-“所有程序”-“Microsoft SQL Server 2008R2”-“配置工具”-“SQL Server配置管理器” 2.在打开的“SQL Server配置管理器”窗口中,在左 ...

  6. Linux(二)—— Unix&Linux 的基本概念

    Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...

  7. kubernetes deployment升级和回滚

    a.创建deployment pod kubectl run mynginx --image=docker.io/nginx: --record 准备svc文件 apiVersion: v1 kind ...

  8. dicom错误解决

    https://github.com/pydicom/pydicom/issues/331 sudo apt-get install python-gdcm

  9. Swing 混合布局

    案例一:Border边境边界 package swing; /** * swing 混合布局 */ import java.awt.*; import javax.swing.*; public cl ...

  10. KVM宿主机上虚拟机动态添加新磁盘

    (1)KVM宿主机查看运行的虚拟机 $ virsh list --all (2)将qcow2的磁盘移动到/var/lib/libvirt/images/,比如为centos.qcow2 (3)进入/e ...