Flask基础(一)

Flask

1.入门Flask

pip3 install Flask;   Tips警告!!!:不要使用工具中的插件创建Flask项目

安装完Flask会有几个附加包,其中各个包应用

Jinja2   用于模板
MarkupSafe   防止xss攻击,用于render
Werkzeug     就是WSGI,承载Flask应用

2.三行代码启动Flask项目

from flask import Flask
​
# app = Flask("app.py")  # 给应用起个名字,通常为当前文件名,可以用 __name__
app = Flask(__name__)  # 以后用这个
if __name__ == '__main__':
    app.run()

Flask 的 Hello World

from flask import Flask, render_template, redirect, send_file, jsonify
​
# app = Flask("app.py")  # 给应用起个名字,通常为当前文件名
app = Flask(__name__)
​
@app.route("/")  # 路由
def home():
    return "hello Word I am Flask"if __name__=='__main__':
    app.run()

 

3.Flask 中的 Response

响应类型\模板对比DjangoFlask
返回字符串 HttpResponse("str") " str "
响应模板 render() render_template("index.html")
重定向 redirect("/") redirect("/")

以上是Web框架的 Response 三剑客

响应模板配置

4.sendfile()

上传文件

@app.route("/file")
def file():
    return send_file('app.py')  
# 返回文件内容,自动识别文件类型,Content-type中添加文件类型,Content-type:文件类型
** 浏览器特性 可识别的Content-type 自动渲染 不可识别的Content-type 会自动下载

5.jsonify()

@app.route("/get_json")
def get_json():
    d = {"k":"v"}
    # return d
    # return jsonify("Hello Word")
# 返回标准格式的JSON字符串 先序列化JSON的字典,Content-type中加入 Application/json
** Flask 1.1.1 版本中 可以直接返回字典格式,无需jsonify

6.Flask中的Request

 返回结果
request.method ["GET","POST"]
request.path # /login,返回url
request.url # /http://127.0.0.1:9527/login?id=1,返回完整路径
request.host # 127.0.0.1:5000,返回主机地址
request.cookies # cookies
request.files # request中的文件,返回FileStorage中,存在sava保存文件,filename原始文件名
request.form # FormData中的数据,返回ImmutableMultiDict类型,可用to_dict转化为字典
request.args # id=1,url中的数据
request.data # 请求头中不含有 Form FormData 保存原始请求体中的数据 b""
request.json # 请求头中带有content-type:application/json,如果没有在data中
request.values # 获取url和form数据,如果key相同,url会覆盖form。一般不用!!!!!!

7.Jinja2 ------ template语言

{{ }} 引用

{% %}逻辑引用

与Django用法相同,但比Django多,有其它表现

# 当传入字典列表时,获取字典值的方法
{% for student in stu_l %}
    <tr>
        <td>{{ student.name }}</td>
        <td>{{ student["age"] }}</td>
        <td>
            {% if student.get("gender") != '' and student.get("gender") != '' %}
                女
            {% else %}
                {{ student.get("gender") }}
            {% endif %}
        </td>
    </tr>
{% endfor %}
字典列表取值
# 当传入字典套字典时,两种不同方式
{% for skey in stu_d %}
    <tr>
        <td>{{ skey }}</td>
        <td>{{ stu_d[skey].name }}</td>
        <td>{{ stu_d.get(skey).age }}</td>
        <td>111</td></tr>
{% endfor %}
{% for k,v in stu_d.items() %}
    <tr>
        <td>{{ k }}</td>
        <td>{{ v.name }}</td>
        <td>{{ v.get("age") }}</td>
        <td>111</td>
    </tr>
{% endfor %}
字典套字典取值

扩展——生成标签

方式一:模板直接生成标签

{% macro my_input(na,ty) %}   # 找到my_input并接收变量
    <input type="{{ ty }}" name="{{ na }}">
{% endmacro %}
{{ my_input("username","password") }}  # 开始生成
# 从而生成一个input标签,其类型为password,name值为username
模板直接生成

方式二:后台传入标签

# 后台中
from flask import Markup   # 先导入模块
inp = Markup("<input type='submit' value='后端返回按钮'>")   # 后台定义并返回
return render_template("my_a.html",btn=inp)

# 模板中
{{ btn }}   # 直接使用
-------------------------------------------------------------------
# 如果要生成的标签多,可以使用全局模板 @app.template_global()
# 使用方法:
    # 1.先写一个方法
    # 2.为这个方法加上 @app.template_global() 装饰器
    # 3.模板中进行使用
# 后台
@app.template_global()
def my_inp(ty,na):
    s = f"<input type='{ty}' value='{na}'>"
    return Markup(s)
# 模板中
{{ my_inp('submit','text') }}  # 后台中的  函数名(参数1,参数2)
后台生成标签

 

8.Flask中的Session

基于请求上下文管理机制

使用方法:

  1. 先导入session

  2. 设置secret_key的值(随便设置)

from flask import session
app.secret_key = "@#$E@#$"

 

 

posted @ 2020-04-13 22:47  无夜。  阅读(100)  评论(0)    收藏  举报