flask-get/post/线程隔离g对象/钩子函数

get:

通过request.args来获取

from flask import Flask, request
@app.route(‘/search/‘)
def search():
    # 获得参数字典
    args = request.args
    print(args)  # ImmutableMultiDict([(‘q‘, ‘hello‘)])
    print(args.get(‘q‘))  # hello
    return ‘search‘

post:

 1 from flask import Flask, url_for, redirect, render_template, session, request
 2 import config
 3 from db import db
 4 from models import Article
 5
 6 app = Flask(__name__)
 7 app.config.from_object(config)
 8
 9 @app.route(‘/‘)
10 def index():
11     return render_template(‘index.html‘)
12
13 # 默认的视图函数采用get,如果使用post则需要注明
14 @app.route(‘/login‘, methods=[‘GET‘, ‘POST‘])
15 def login():
16     if request.method == ‘GET‘:
17         return render_template(‘login.html‘)
18     else:
19         username = request.form.get(‘username‘)
20         password = request.form.get(‘password‘)
21         return ‘%s, %s‘ % (username, password)
22
23 if __name__ == ‘__main__‘:
24     app.run()

value.py

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>{% block title %}{% endblock %}</title>
 6         <style>
 7         .nav{
 8             background: #DAD435;
 9             height: 65px;
10         }
11         ul{
12             overflow: hidden;
13         }
14         ul li{
15             float: left;
16             list-style: none;
17             padding: 0 10px;
18             line-height: 65px;
19         }
20         ul li a{
21             color: #ffffff;
22         }
23     </style>
24     {% block head %}{% endblock %}   <!--用于加载不同样式-->
25 </head>
26 <body>
27 <div class="nav">
28     <ul>
29         <li><a href="#">首页</a> </li>
30         <li><a href="#">发布问答</a> </li>
31         <li><a href="#">注册</a> </li>
32         <li><a href="{{ url_for(‘login‘) }}">登录</a> </li>
33         <li><a href="{{ url_for(‘search‘)}}">搜索</a> </li>
34     </ul>
35 </div>
36 {% block main %}{% endblock %}
37
38 </body>
39 </html>

base.html

 1 {% extends ‘base.html‘ %}
 2
 3 {% block title %}
 4     登录页面
 5 {% endblock %}
 6
 7 {% block main %}
 8     <form action="{{ url_for(‘login‘) }}" method="post">
 9         <table>
10             <tbody>
11             <tr>
12                 <td>用户名:</td>
13                 <td><input type="text" placeholder="请输入用户名" name="username"></td>
14             </tr>
15             <tr>
16                 <td>密码:</td>
17                 <td><input type="text" placeholder="请输入密码" name="password"></td>
18             </tr>
19             <tr>
20                 <td></td>
21                 <td><input type="submit" value="登录"></td>
22             </tr>
23
24
25             </tbody>
26         </table>
27     </form>
28 {% endblock %}

login.html

post通过flask.request.form获取

线程隔离g对象:

from flask import g

绑定对象:

g.username = ‘root‘    # 把username绑定到全局,所有地方都可以使用

使用:绑定后,会保存数据,在一次请求中所有的代码的地方均可使用,哪怕不是一个文件。只限一次请求内,访问下一个页面就不会存在了。

# 在utils.py
from flask import g
def login_log():
    print(g.username)

钩子函数:

  • before_request:

装饰器, 可以把需设置为钩子函数的代码放在每一次视图函数执行之前执行

@app.before_request
def my_before_request():
    print(‘before all request‘)
  • context_processor:
@app.context_processor
def my_context_process():
    username = session.get(‘username‘)
    return {‘username‘: username}

上下文处理器会返回一个字典,字典中的key会被当成变量来渲染。

(每次请求的html中的username都会被自动填充进这个key的value值)

原文地址:https://www.cnblogs.com/clairexxx/p/9748845.html

时间: 2024-10-02 02:34:18

flask-get/post/线程隔离g对象/钩子函数的相关文章

flask高级编程-LocalStack线程隔离

30.LocalStack作为线程隔离对象的意义 30.1 数据结构 限制了某些能力 30.2 线程隔离 # -*- coding=utf-8 -*- import threading import time from werkzeug.local import LocalStack my_stack = LocalStack() my_stack.push(1) print('in main thread after push, value is:' + str(my_stack.top))

Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

from flask import Flask from flask import request from flask import render_template from flask_wtf import CSRFProtect as WTF # 利用表单类去渲染模板时需要用到 from forms import LoginForm app = Flask(__name__) WTF(app) # 在app上注册一个 WTF (所有的flask插件都必须进行注册) app.config.f

flask LOCAL线程隔离技术

from threading import Thread from werkzeug.local import Local local = Local()#实例化一个线程隔离对象 request = '123' class MyThread(Thread): def run(self): global request request = 'abc' print('子线程',request) mythread = MyThread() mythread.start() mythread.join(

flask之g对象

g对象 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 g对象和session的区别 session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session,但是g对象不是,g对象不需要管过期时间,请求一次就g对象就 from flask import Flask,g,request app = Flask(__name__) ''' 专门用来存储用户信息的g对象,g的全称的为g

Flask中g对象,以及g,session,flash之间的区别

一.g对象的使用 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 g对象的使用: 设置:g.变量名= 变量值 获取:g.name 注意:g对象比如说再a路由设置只能再a路由中去到g对象,在b路由汇总没法获得g对象 二.g,session,flash之间的区别 session 只要设置,在任意请求中都能拿到,无论你拿多少次 flash 一旦设置,可在任意一次请求中获取,但是只能取一次 g 在A路由中设置设置,只能在A路由请求中请求中获取

Flask入门flask-script 蓝本 钩子函数(三)

1 flask-script扩展库 概念: 是一个flask终端运行的解析器 ,因为项目完成以后,代码改动会有风险,所以借助终端完成不同启动项的配置 安装 pip3 install flask-script 使用 from flask_script import Manager #导入 manager = Manager(app) #初始化flask运行的解析器 manager.run() #运行 执行程序需要在启动项输入命令 python3 当前启动文件名.py runserver 可选参数

flask之分析线程和协程

flask之分析线程和协程 01 思考:每个请求之间的关系 我们每一个请求进来的时候都开一个进程肯定不合理,那么如果每一个请求进来都是串行的,那么根本实现不了并发,所以我们假定每一个请求进来使用的是线程. 那么线程中数据互相不隔离,存在修改数据的时候数据不安全的问题. 假定我们的需求是,每个线程都要设置值,并且该线程打印该线程修改的值. from threading import Thread,current_thread import time class Foo(object): def _

Flask 之分析线程和协程

目录 flask之分析线程和协程 01 思考:每个请求之间的关系 02 threading.local 03 通过字典自定义threading.local 04 通过setattr和getattr实现自定义threthreading.local 05 每个对象有自己的存储空间(字典) 06 如果是你会如何设计flask的请求并发? flask之分析线程和协程 01 思考:每个请求之间的关系 我们每一个请求进来的时候都开一个进程肯定不合理,那么如果每一个请求进来都是串行的,那么根本实现不了并发,所

线程隔离ThreadLocal

ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本. 从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思. 所以