zoukankan      html  css  js  c++  java
  • flask笔记二

    web表单

      web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互

    1、用Flask-WTF来处理表单

      (1)在根目录下编辑扩展配置--config.py

    CSRF_ENABLED = True
    SECRET_KEY = 'you-will-never-guess'
    

     CSRF_ENABLED配置跨站点保护,就是防止程序挟持用户执行非本意的操作,是一种web的攻击行为,这个设置会提高web的安全性。

    SECRET_KEY是当CSRE(跨站请求伪造)激活时执行,实现加密用来验证表单,避免网站的恶意攻击。

      (2)在Flask中读取该配置文件,(文件 app/__init__.py):

    from flask import Flask
    
    app = Flask(__name__)
    app.config.from_object('config')
    
    from app import views
    

     2、用户登录表单的实现

      使用 Flask-WTF 时,每个 Web 表单都由一个继承自 Form 的类表示。这个类定义表单中的一组字段,每个字段都用对象表示。字段对象可

    附属一个或多个验证函数。验证函数用来验证用户提交的输入值是否符合要求。在这个小程序中是由OpenId完成用户的验证的,类似于Hadoop中的SSH加密算法,不需要

    调用数据库中的用户名和密码登录,浏览器会根据用户产生的cookie对用户进行识别。

    现在新建第一个表单(app/forms.py):

    from flask.ext.wtf import Form
    from wtforms import StringField, BooleanField
    from wtforms.validators import DataRequired
    
    class LoginForm(Form):
        openid = StringField('openid', validators=[DataRequired()])
        remember_me = BooleanField('remember_me', default=False)

      解释:StringField类表示属性为 type="text" 的 <input> 元素;BooleanField表示复选框,选择true或者flase。DataRequired 验证器只是简单地检查相应域提交的数据是否是空。

    WTForms支持的HTML标准字段:

    WTForms内置的验证函数:

    3、创建表单模板

    创建好表单,那么现在该做的就是用HTML模板实现表单中的功能。接着用HTML写出布局。

    这里就是我们登录的模板(文件 app/templates/login.html):

     1 <!-- extend from base layout -->
     2 {% extends "base.html" %}
     3 
     4 {% block content %}
     5 <h1>Sign In</h1>
     6 <form action="" method="post" name="login">
     7     {{form2.hidden_tag()}}
     8     <p>
     9         Please enter your OpenID:<br>
    10         {{form2.openid(size=80)}}<br>
    11     </p>
    12     <p>{{form2.remember_me}} Remember Me</p>
    13     <p><input type="submit" value="Sign In"></p>
    14 </form>
    15 {% endblock %}

      ♦需要注意的是,创建表单模板需要将表单中  “class LoginForm(Form)” 类中的功能 通过参数(这里是form2)传入模板。当我们编写渲染这个模板的视图函数的时候,我们将会特别注意传送这个模板参数到模板中。

      ♦form.hidden_tag() 模板参数将被替换为一个隐藏字段,用来是实现在配置中激活的 CSRF 保护。如果你已经激活了 CSRF,这个字段需要出现在你所有的表单中。

    4、创建表单视图

    现在完成渲染模板,因为功能已经在表单中实现,所以只需要在视图中调用一下表单即可。下面是视图文件( app/views.py):

     1 from flask import render_template, flash, redirect
     2 from app import app
     3 from .forms import LoginForm
     4 
     5 # index view function suppressed for brevity
     6 
     7 @app.route('/login', methods = ['GET', 'POST'])
     8 def login():
     9     form = LoginForm()
    10     return render_template('login.html',
    11         title = 'Sign In',
    12         form2 = form)

      在这里我特别将form2和form区别开来,form2其实就是模板中抽象的概念,没有实际的意义,只有在视图文件中指定它的功能时才被赋予form=LoginForm()的实

    例化的功能。也就是上面的模板中form2可以换成任意的变量,只要在视图中赋值就可以了。

     

     

  • 相关阅读:
    Kafka科普系列 | Kafka中的事务是什么样子的?
    RabbitMQ和Kafka,更加便捷高效的消息队列使用方式,请放心食用
    艰涩难懂,不存在的,消息队列其实很简单
    这七个关于分布式消息服务的常见问题,你知道吗?
    别再犯低级错误,带你了解更新缓存的四种Desigh Pattern
    详细介绍redis的集群功能,带你了解真正意义上的分布式
    教你简单理解分布式与传统单体架构的区别
    新手向:从不同的角度来详细分析Redis
    Java多线程Runnable与Callable区别与拓展
    项目中是用eCharts
  • 原文地址:https://www.cnblogs.com/xbkp/p/4945928.html
Copyright © 2011-2022 走看看