zoukankan      html  css  js  c++  java
  • 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值)

  • 相关阅读:
    10个大数据领域的杰出公司
    面向对象下面几步
    $response->decoded_content; 和$response->content; 乱码问题
    netty新建连接并发数很小的case
    与eclipse集成的管理zookeeper工具
    zookeeper集群搭建
    用 Flask 来写个轻博客 (22) — 实现博客文章的添加和编辑页面
    perl 对象
    业务人员自助BI分析不够用,还要自助数据准备?
    业务人员自助BI分析不够用,还要自助数据准备?
  • 原文地址:https://www.cnblogs.com/clairexxx/p/9748845.html
Copyright © 2011-2022 走看看