get 请求404_Flask 模板 . 请求和响应 . 闪现 . session的使用 . 请求扩展

本文介绍了Flask框架中模板的使用,包括重定向的两种方式;深入讲解了jinja2模板引擎及其防止XSS攻击的方法;探讨了请求和响应的交互,以及request对象的属性和响应对象的方法;详细阐述了闪现消息的原理及实践;最后,讨论了session的创建、使用、删除和读取,以及Flask的请求扩展功能,如中间件、错误处理等。
摘要由CSDN通过智能技术生成

一 模板:

1 重定向:重新定位到新的位置.

使用一: 暂时重定向

from flask import Flask,redirect

@app.route('/user_info/')
def user_info():
    name = request.args.get('name')
    pwd = request.args.get('pwd')
    if name=='mark' and pwd == '123':
        return '{}的信息'.format(name)
    return redirect('/login/')     # 可以换成 return redirect(url_for('login'))


@app.route('/login/')
def login():
    return '这是登录页面'

使用二 : 永久重定向(比暂时多了: code=301 )

from flask import Flask,redirect

@app.route('/user_info/')
def user_info():
    name = request.args.get('name')
    pwd = request.args.get('pwd')
    if name=='mark' and pwd == '123':
        return '{}的信息'.format(name)
   return redirect('/login/', code=301)  # 会返回301状态码给浏览器 


@app.route('/login/')
def login():
    return '这是登录页面'

二 jinja2模板引擎

和之前django的基本一致如:for if 等

处理xss攻击:

1 模板层   要渲染的字符串|safe
2 后端:Markup('<input type="text">')

Markup等价django的mark_safe ,

传参方式一:

@app.route('/')
def index():
    return render_template('index.html',name="mark",age=18)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板传参</title>
</head>
<body>
    {{name}}
    {{age}}
</body>
</html>

传参方式二:

@app.route('/demo1/')
def demo1():
    context_dict = {"name":"mark",
               "age":"mark",
               "sex":"girl"}

    return render_template('index.html',context_dict = context_dict)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板传参</title>
</head>
<body>
    {{context_dict.name}}
    {{context_dict.age}}
    {{context_dict.sex}}
</body>
</html>

传参方式三:

def demo2():
    context_dict = {"name": "mark",
               "age": "mark",
               "sex": "girl",
                "other_info":{"tel":1365,
                               "qq":565656}}

    return render_template('index.html',**context_dict)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板传参</title>
</head>
<body>
    {{name}}
    {{age}}
    {{sex}}
    {{other_info.tel}}
    {{other_info["qq"]}}
</body>
</html>

二 请求和响应

request对象的属性和方法

request.method  提交的方法

request.args  get请求提及的数据

request.form   post请求提交的数据

request.values  post和get提交的数据总和

request.cookies  客户端所带的cookie

request.headers  请求头

request.path        不带域名,请求路径
request.full_path  不带域名,带参数的请求路径

request.url           带域名带参数的请求路径
request.base_url      带域名请求路径
request.url_root      域名
request.host_url      域名
request.host	      127.0.0.1:500

request.files         文件

响应对象方法:

响应对象
响应相关信息
return "字符串"
return render_template('html模板路径',**{})
return redirect('/index.html')
对应着: django,JsonResponse
return jsonify({'k1':'v1'})

    aa='hello world'
    res=make_response(aa)
    res.set_cookie('xxx','lqz')
    # 往响应头中放东西
    res.headers['X-Something'] = 'A value'
    print(type(res))
    from  flask.wrappers import Response
    return res

     response = make_response(render_template('index.html'))
     response是flask.wrappers.Response类型
     response.delete_cookie('key')
     response.set_cookie('key', 'value')
     response.headers['X-Something'] = 'A value'
     return response
     return 'hello'

三 闪现:

仅仅在下一个请求中访问这个数据

实例:

from flask import Flask,request,jsonify,make_response,session,flash,get_flashed_messages


app=Flask(__name__)
app.debug=True
app.secret_key='sdafasdfasdf'
@app.route('/',methods=['GET','POST'])
def index():  
    flash('lqz',category='error1')  # 往某个位置放值
    return 'hello'

@app.route('/order',methods=['GET','POST'])
def order():
    res=get_flashed_messages(category_filter=['error1'])
    print(res)
    return  'cccc' # 从某个位置取出来

@app.route('/order2',methods=['GET','POST'])
def order2():
    # res=get_flashed_messages()
    # res=get_flashed_messages(category_filter=['error1'])
    res=get_flashed_messages(category_filter=['error1'])
    print(res)
    return  'dsadfsda' # 从某个位置取出来
if __name__ == '__main__':
    app.run()

fdf4b9991ab66d19ddf366afdaaf233d.png

session的使用

全局导入:

from flask import session

视图函数中:

session['key']=value

删除:

session.pop('key')

取:

session['key']

五 请求扩展

类似于django的中间件,请求来了,请求走了,什么操作

1 请求来了就会触发,类似于django的process_request,如果有多个,顺序是从上往下

@app.before_request
def before(*args,**kwargs):
    if request.path=='/login':
        return None
    else:
        name=session.get('user')
        if not name:
            return redirect('/login')
        else:
            return None

2 请求走了就会触发,类似于django的process_response,如果有多个,顺序是从下往上执行

@app.after_request
def after(response):
    print('我走了')
    return response

@app.after_request
def after2(response):
    print('我走了2222')
    return response

3 before_first_request 项目启动起来第一次会走,以后都不会走了,也可以配多个(项目启动初始化的一些操作)

@app.before_first_request
def first():
    print('我的第一次')

4 每次视图函数执行完了都会走它,# 用来记录出错日志

@app.teardown_request  # 用来记录出错日志
def ter(e):
    print(e)
    print('我是teardown_request ')

5 errorhandler绑定错误的状态码,只要码匹配,就走它

@app.errorhandler(404)
def error_404(arg):
    return render_template('error.html',message='404错误')

6 全局标签

@app.template_global()
def sb(a1, a2):
    return a1 + a2

在模板中:{{ sb(3,4) }}

7 全局过滤器

@app.template_filter()
def db(a1, a2, a3):
    return a1 + a2 + a3

在模板中{{ 1|db(2,3)}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值