一.向前端返回
from flask import Flask,render_template,redirect,jsonify,send_file,request
app=Flask(__name__) __name__使flask能找到本地文件
app.run(host="127.0.0.1",port=8888,debug=True) debug 变更代码后 自动重启
1.Httpresponse
@app.route("/",methods=["GET","POST"]) 1.添加路由方法:在函数上加装饰器 指定methods 后只有指定的方法才
def index(): 会被允许
return "hello world " 2.可以直接返回 一个字符串
2.render_template
return render_template('login.html') 返回一个html
inp = Markup("<input type='text'>")
return render_template("index.html",stu={'a':1,'b':2},inp=inp) 传值到html 字典 和 标签需要用Markup 修饰
3.redirect
return redirect('/login') 重定向
4.send_file , jsonify
return send_file("1.mp4") 打开并传输文件 可以是mp3 mp4 文本 jpg (括号内 是文件路径)
return jsonify( {"name":"JWB","age":73} ) 原理是设置响应头 Content-Type: application/json 返回一个json数据
二.request 对象
<Request 'http://127.0.0.1:8888/login' [GET]>
1.request.method 请求方式 GET
2.request.form 存储的是所有FormData中的所有数据 ImmutableMultiDict([('user', 'wyc'), ('password', '123')])
1. request.form.get('user') 可以get获取key对应值空返回 None 2. request.form.to_dict() 可以转换为字典 再拿 {}
3.request.args 存储的是所有URL中的所有数据 ImmutableMultiDict([]) get拿值
4.request.json 存放在request.json 当请求头是Content-Type: application/json
5.request.data 当Content-Type无法被解析时,存放原始数据
6.request.values 存储url form 参数 CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])])
6.request.url 请求地址
7.request.path url路由地址 /login 域名后面的
8.request.host 主机地址 http://127.0.0.1:8888/login
9.request.host_url 将主机地址转换为httpurl http://127.0.0.1:8888/
三.模板 语言
STUDENT_DICT = {
1: {'name': 'Old', 'age': 38, 'gender': '中'},
2: {'name': 'Boy', 'age': 73, 'gender': '男'},
3: {'name': 'EDU', 'age': 84, 'gender': '女'}
}
STUDENT_LIST = [
{'name': 'Old', 'age': 38, 'gender': '中'},
{'name': 'Boy', 'age': 73, 'gender': '男'},
{'name': 'EDU', 'age': 84, 'gender': '女'}
]
@app.route("/")
def index():
return render_template("index.html",dic=STUDENT_DICT,list=STUDENT_LIST)
{% for d in list %}
<tr>
<td>{{ d.name }}</td>
<td>{{ d.get('age') }}</td>
<td>{{ d['gender'] }}</td>
</tr>
{% endfor %}
{% for id,d in dic.items() %}
<tr>
<td>{{ id }}</td>
<td>{{ d.get('name') }}</td>
<td>{{ d['age'] }}</td>
<td>{{ d.gender }}</td>
</tr>
{% endfor %}
当传入值分别是 列表 和 字典时 字典有三种方法取值
字典 可以.items() 先取值值 一样有三种方法
二.模板 复用 继承 宏
1.复用 先写一个 经常复用的 代码段my_block.html : <h1>我是一个block</h1>
2.然后其他html 页面就可以使用 : {% include 'my_block.html' %} 使用这个代码块
2. 继承
{% block content %}
{% endblock %} 写在经常复用的mb.html里 提供一个接口,让其他儿子模板可以接入进来,往这里插自己的东西
{% extends 'mb.html' %} 写在儿子模板第一行 继承这个父亲模板
{% block main %} 下面这个就是往父亲模板插入的东西
<h1>我接入父模板/h1>
{% endblock %}
3.宏
{% macro my_input(na,tp) %}
<input type="{{ tp }}" value="{{ na }}">
{% endmacro %}
{{ my_input("uname","submit") }}
4.flask中 的文本替换
@app.template_global() 全局函数 每个模板都能使用
def ab(a,b):
return a+b
@app.template_filter() 偏函数
def axb(a,b):
return a*b
{{ ab(6,9) }}
{{ ab(3,4) | axb(834473503) }}
5.Session
from flask import session
app.secret_key = "yinjiaodawangba" flask原始session 必须加secret_key
session["user"] = "jwb" Flask中的session是保存在 cookie 中的 默认名称是session
session.get("user")