flask 基础语法学习
回顾
- #6行flask
- from flask import Flask
- app = Flask(__name__)
- @app.route("/")
- def index():
- return "HelloWorld!!"
- app.run()
1.response
- from flask import render_template,redirect,send_file,jsonify
- return =httpresponse
- render_template
- redirect
- 特殊返回值
- 1.send_file(文件路径) 打开文件并返回文件内容 Content-Type 文件类型 自动识别
- 2.jsonify({k:v}) Content-Type:application/json app.config["JSONIFY_MIMETYPE"]
2.request
- request.method 请求方式
- request.args url参数
- print(request.args.to_dict())#转换成字典
- request.form FormData 数据
- request.json #请求头 Content-Type:application/json 数据序列化至此
- request.data 只要请求体中有内容 b"”
- request.files 接收FormData中的文件
3.session
- from flask import session
- app.secret_key=""
- session["user"]="username"
4.路由
- 动态参数
- @app.route("/detail/<stu_id>")
- def detail(stu_id)
- 1.endpoint Flask Mapping 路由和视图的指向
- 2.methods 允许进入视图函数的请求方式
5.初始化配置
- Flask(__name__) 中
- 1.template_folder 模版存放路径
- 2.static_folder 静态文件存放路径
- 3.static_url_path 金泰文件访问路径
6.config对象 正式测试环境
- 2.Flask对象配置
- app.config == app.default_config 查看默认配置 及 配置项
- class Obj(object):
- DEBUG = True
- app.config.from_object(Obj) # 记住
7.蓝图
- Flask蓝图
- Blueprint: bp.py
- from flask import Blueprint
- # 把Blueprint理解为 不能被 Run 的 Flask 对象
- bp = Blueprint("bp",__name__,url_prefix="/user")
- @bp.route("/bp",methods=["GET","Post"])
- def my_bp():
- return "I am bp in user.py"
- __init__py
- from flask import Flask
- from .views import add
- def create_app():
- app=Flask(__name__)
- app.register_blueprint(add.add)
- return app
- app.py:
- from flask import Flask
- from user import bp
- from acc import acc
- app = Flask(__name__)
- app.register_blueprint(bp)
- app.register_blueprint(acc)
- if __name__ == '__main__':
- app.run(debug=True)
8.特殊装饰器 中间件
- @app.before_request # 在请求进入视图函数之前
- @app.after_request # 结束视图函数之后,在响应返回客户端之前
- def af5(ret):
- 正常 be1 - be2 - vf - af5 - af4 - af3 - af2 - af1
- 异常 be1 - af5 - af4 - af3 - af2 - af1
- @app.errorhandler(404)
- def error404(error_message):
9.CBV
- from flask import views
- class Login(views.MethodView):
- def get(self):
- pass
- def post(self):
- pass
- app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))
- endpoint == as_view(name="login") 中的 "login"
jianjin2 模版
- {{}} 引用 执行函数
- {%%} 逻辑代码
- {{ stu_list[0].name }}{{ stu_list.0.age }}
- {{ stu_dict }}
- {% for stu in stu_list %}
- <p>{{ stu.name }}{{ stu.get("age") }}{{ stu["gender"] }}</p>
- {% endfor %}
- #if判断
- {% if v["gender"] == "中" %}
- 男
- {% else %}
- {{ v["gender"] }}
- {% endif %}
- 自定义标签simple_tag
- @app.template_global()#全局使用 可选
- def ab(a,b):
- return a+b
- html中引入
- {{ ab(4,4) }}
- 前端执行html
- @app.route("/")
- def index():
- tag = "<input type='text' name='user' value='xiao'>"
- return render_template("index.html",tag=tag)
- <body>
- {{ tag|safe }}
- </body>
- 后端执行html
- from flask import Markup # 导入 flask 中的 Markup 模块
- @app.route("/")
- def index():
- tag = "<input type='text' name='user' value='xiao'>"
- # Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签
- markup_tag = Markup(tag)
- print(markup_tag,type(markup_tag))
- return render_template("index.html", tag=markup_tag)
- 母板
- index.html
- <body>
- <h1>Welcome to My</h1>
- <h2>下面的内容是不一样的</h2>
- {% block content %}
- {% endblock %}
- <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
- <h1>My is Good</h1>
- </body>
- login.html
- {% extends "index.html"%}
- {% block content %}
- {% endblock %}
- include jinja2
- login.html
- <h4>欢迎登陆</h4>
- <form>
- 用户名:<input type="text" name="user">
- 密码:<input type="text" name="pwd">
- <input type="submit" value="提交">
- </form>
- index.html 文件中的内容
- <body>
- <h1>Welcome to My</h1>
- {% include "login.html" %}
- <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
- <h1>My is Good</h1>
- </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 基础语法学习的更多相关文章
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- Python 基础语法学习(第一讲)---类的使用
[写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...
- Java基础语法学习
Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...
- java 基础语法学习01
Java基础语法 注释 初次使用idea时相关配置 new project ->Empty project->进入页面 再选择file->project structure-> ...
- React基础语法学习
React主要有如下3个特点: 作为UI(Just the UI) 虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法 ...
- Go基础语法学习
Go语言基础 Go是一门类似C的编译型语言,但是它的编译速度非常快.这门语言的关键字总共也就二十五个,比英文字母还少一个,这对于我们的学习来说就简单了很多.先让我们看一眼这些关键字都长什么样: 下面列 ...
- Xpath基础语法学习
背景: 之所以学习Xpath,是因为在学习selenium定位页面元素,总是定位不到元素.为了更好的开展自动化测试,先学习下Xpath. 一:Xpath是什么. 1:Xpath是一门在XML文档中查找 ...
- Swift基础语法学习总结一
1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的. ...
随机推荐
- USB_ModeSwitch for Android 7
USB_ModeSwitch官网: USB_ModeSwitch - Handling Mode-Switching USB Devices on Linux USB_ModeSwitch for A ...
- android添加阴影
android底部增加背景 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns: ...
- HBase单机模式部署
1.上传&解压 2.设置环境变量 3.启用&检验 4.编辑hbase-env.sh 5.编辑hbase-site.xml 6.启动hbase 7.验证 8.启动hbase shell
- [20190416]完善shared latch测试脚本2.txt
[20190416]完善shared latch测试脚本2.txt --//昨天测试shared latch,链接:http://blog.itpub.net/267265/viewspace-264 ...
- mssql2008 r2 修改默认端口
1.点击“开始”-“所有程序”-“Microsoft SQL Server 2008R2”-“配置工具”-“SQL Server配置管理器” 2.在打开的“SQL Server配置管理器”窗口中,在左 ...
- Linux(二)—— Unix&Linux 的基本概念
Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...
- kubernetes deployment升级和回滚
a.创建deployment pod kubectl run mynginx --image=docker.io/nginx: --record 准备svc文件 apiVersion: v1 kind ...
- dicom错误解决
https://github.com/pydicom/pydicom/issues/331 sudo apt-get install python-gdcm
- Swing 混合布局
案例一:Border边境边界 package swing; /** * swing 混合布局 */ import java.awt.*; import javax.swing.*; public cl ...
- KVM宿主机上虚拟机动态添加新磁盘
(1)KVM宿主机查看运行的虚拟机 $ virsh list --all (2)将qcow2的磁盘移动到/var/lib/libvirt/images/,比如为centos.qcow2 (3)进入/e ...