• flask web development Chapter04


    Web Forms

    Cross-Site Request Forgery (CSRF) Protection

    hello.py: Flask-WTF configuration

    app.config['SECRET_KEY'] = 'hard to guess string'
    

    Form Classes

    hello.py: Form class definition

    from flask.ext.wtf import Form
    from wtforms import StringField, SubmitField
    from wtforms.validators import Required
    
    class NameForm(Form):
      name = StringField('What is your name?', validators=[Required()])
      submit = SubmitField('Submit')
    

    hello.py: Route methods

    @app.route('/', methods=['GET', 'POST'])
    def index():
      name = None
      form = NameForm()
      if form.validate_on_submit():
        name = form.name.data
        form.name.data = ''
      return render_template('index.html', form=form, name=name)
    

    templates/index.html: Using Flask-WTF and Flask-Bootstrap to render a form

    {% extends "base.html" %}
    {% import "bootstrap/wtf.html" as wtf %}
    {% block title %}Flasky{% endblock %}
    {% block page_content %}
    <div class="page-header">
      <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
    </div>
    {{ wtf.quick_form(form) }}
    {% endblock %}
    

    Redirects and User Sessions

    hello.py: Redirects and user sessions

    from flask import Flask, render_template, session, redirect, url_for
    @app.route('/', methods=['GET', 'POST'])
    def index():
      form = NameForm()
      if form.validate_on_submit():
        session['name'] = form.name.data
        return redirect(url_for('index'))
      return render_template('index.html', form=form, name=session.get('name'))
    

    Message Flashing

    hello.py: Flashed messages

    from flask import Flask, render_template, session, redirect, url_for, flash
    @app.route('/', methods=['GET', 'POST'])
    def index():
      form = NameForm()
      if form.validate_on_submit():
        old_name = session.get('name')
        if old_name is not None and old_name != form.name.data:
          flash('Looks like you have changed your name!')
        session['name'] = form.name.data
        form.name.data = ''
        return redirect(url_for('index'))
      return render_template('index.html',form = form, name = session.get('name'))
    

    templates/base.html: Flash message rendering

    {% block content %}
    <div class="container">
      {% for message in get_flashed_messages() %}
      <div class="alert alert-warning">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        {{ message }}
      </div>
      {% endfor %}
      {% block page_content %}{% endblock %}
    </div>
    {% endblock %}
    
  • 相关阅读:
    以用户、组织结构和权限为例,论如何将基于关系型数据库的设计简化
    spring InitializingBean接口
    DelegatingFilterProxy
    组织机构权限系统的实现(工作流)
    activiti 引擎 数据库设计说明书
    modeler与activiti进行整合
    流程引擎的API和服务基础
    广东程序员在加利福尼亚
    开源 -- 机器学习相关报道
    国内一些大公司的开源项目
  • 原文地址:https://www.cnblogs.com/keer2345/p/6045732.html
Copyright © 2020-2023  润新知