title: flask学习笔记

subtitle: 1. flask框架函数

date: 2018-12-14 10:17:28

Flask学习

学习Miguel Grinberg的2017年新版The Flask Mega-Tutorial教程中遇到的问题,加以记录。

Miguel Grinberg的blog(Flask部分):

The Flask Mega-Tutorial(December 6 2017)

点我刷新

Flask框架函数

Flask框架/库 函数/参数 作用 示例
flask框架 render_template 将模板转换为完整的HTML页面的操作称为渲染。通过render_template渲染模板,该函数传入模板名以及一些模板变量列表,返回被实际变量值替换后的字符串结果。在内部,render_template 调用了原生依赖的Jinja2模板引擎,Jinja2 模板引擎是 Flask 框架的一部分。Jinja2 会把模板参数提供的相应的值替换了 {{…}} 块。 代码块1
Flask-WTF插件 FlaskForm 用户登录表单:Flask-WTF插件来处理本应用中的Web表单,它对WTForms进行了浅层次的封装以便和Flask完美结合。FlaskForm基类。 代码块2
wtforms包 StringField, PasswordField, BooleanField, SubmitField,(DataRequired) 用户登录表单:表单字段的类,每个字段类都接受一个描述或别名作为第一个参数,并生成一个实例来作为LoginForm的类属性。可选参数validators用于验证输入字段是否符合预期。DataRequired验证器仅验证字段输入是否为空 代码块2
Flask-WTF插件 form参数/form.hidden_tag()模板参数 表单模板:login.html模板需要一个form参数的传入到渲染模板的函数中,form来自于LoginForm类的实例化。通过用户视图进行实例化和关联。/ form.hidden_tag()模板参数生成了一个隐藏字段,其中包含一个用于保护表单免受CSRF攻击的token。 对于保护表单,需要做的所有事情就是在模板中包括这个隐藏的字段,并在Flask配置中定义SECRET_KEY变量,Flask-WTF会完成剩下的工作。 代码块2
flask框架 methods 表单视图:路由装饰器中的methods参数。它告诉Flask这个视图函数接受GET和POST请求,并覆盖了默认的GET。之前的“Method Not Allowed”错误正是由于视图函数还未配置允许POST请求。通过传入methods参数,就能告诉Flask哪些请求方法可以被接受。 代码块3
flask框架 form.validate_on_submit()函数 表单视图:执行form校验的工作。当浏览器发起GET请求的时候,它返回False。 代码块3
flask框架 redirect()函数 表单视图:指引浏览器自动重定向到它的参数所关联的URL。当前视图函数使用它将用户重定向到应用的主页。 代码块3
flask框架 get_flashed_messages()函数 表单模板(基础模板):get_flashed_messages()返回用flash()注册过的消息列表。接下来的条件结构用来检查变量messages是否包含元素,如果有,则在<\ul>元素中,为每条消息用<\li>元素来包裹渲染。闪现消息的一个特别的属性是,一旦通过get_flashed_messages函数请求了一次,它们就会从消息列表中移除,所以在调用flash()函数后它们只会出现一次。 代码块4
flask框架 url_for()函数 url_for()函数使用URL到视图函数的内部映射关系来生成URL。 例如,url_for('login')返回/login,url_for('index')返回/index。 url_for()的参数是endpoint名称,也就是视图函数的名字。 代码块5

Flask插件

Flask扩展/插架 函数/参数 作用 示例
Flask-WTF插件 FlaskForm 用户登录表单:Flask-WTF插件来处理本应用中的Web表单,它对WTForms进行了浅层次的封装以便和Flask完美结合。FlaskForm基类。 代码块2

代码块1

代码块1:
app/views.py:
from flask import render_template
from app import app @app.route('/')
@app.route('/index')
def index():
user = {'username': 'Gunxiaoshi'}
posts = [
{
'author': {'username': 'John'},
'body': 'Beautiful day in Portland!'
},
{
'author': {'username': 'Susan'},
'body': 'The Avengers movie was so cool!'
}
]
return render_template("index.html",
title='Home',
user=user,
post=posts)
代码块1:(教程给出的for循环是in posts)
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
{% if title %}
<meta charset="UTF-8">
<title>{{ title }} - microblog - GXS</title>
{% else %}
<title>Welcome to microblog! </title>
{% endif %}
</head>
<body>
<h1>Hi, {{user.username}}!</h1>
{% for post in post %}
{# 对于此处的for循环应该是in post #}
<p>{{post.author.username}} says: <b>{{post.body}}</b></p>
{% endfor %}
</body>
</html>

代码块2

app/forms.py:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
submit = SubmitField('Sign In')
templates/login.html:
{% extends "base.html" %} {% block content %}
<h1>Sign In</h1>
<form action="" method="post" novalidate>
{{ form.hidden_tag() }}
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}

代码块3

# @File    : views.py
# @Software: PyCharm # from flask import render_template
# render_template函数需要传入模板名以及一些模板变量列表,返回一个所有变量被替换的渲染的模板。
from app import app
from flask import render_template, flash, redirect
from .forms import LoginForm # index view function suppressed for brevity
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
# if form.validate_on_submit():
# flash('Login requested for OpenID="' + form.openid.data + '", remember_me=' + str(form.remember_me.data))
# return redirect('/index')
# return render_template('login.html', title='Sign In', form=form)
if form.validate_on_submit():
flash('Login requested for user {}, remember_me={}'.format(
form.username.data, form.remember_me.data))
return redirect('/index')
return render_template('login.html', title='Sign In', form=form)

代码块4

<!DOCTYPE html>
<html lang="en">
<head>
{% if title %}
<meta charset="UTF-8">
<title>{{ title }} - microblog - GXS</title>
{% else %}
<title>Welcome to microblog! </title>
{% endif %}
</head>
{# 导航栏代码 #}
<body>
<div>microblog - GXS:
{# <a href="/index">Home</a>#}
{# <a href="/login">Login</a>#}
<a href="{{ url_for('index') }}">Home</a>
<a href="{{ url_for('login') }}">Login</a>
{# 写入需要引用公共模块的.html文件 #}
</div>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body>
</html>

代码块5

<div>
Microblog:
<a href="{{ url_for('index') }}">Home</a>
<a href="{{ url_for('login') }}">Login</a>
</div>
from flask import render_template, flash, redirect, url_for

# ...

@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# ...
return redirect(url_for('index'))
# ...

Flask框架函数的更多相关文章

  1. flask框架基本使用(4)(钩子函数,异常,命令行运行)

    flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html flask 框架基本使用(2):https://www.cnblogs. ...

  2. Flask 框架入门

    Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...

  3. Python自动化运维之30、Flask框架

    Flask 官网:http://flask.pocoo.org/ flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...

  4. 2nd_SE-结对编程1-基于flask框架的四则运算生成器

    0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...

  5. Flask框架

    FLask框架的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...

  6. flask 视图函数的使用

    flask框架 视图函数当中 各种实用情况简单配置 1 建立连接 2 路由参数 3 返回网络状态码 4 自定义错误页面 5 重定向 6 正则url限制 和 url 优化 7 设置和获取cookie # ...

  7. Flask框架(1)--基础

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  8. Flask框架搭建一个日程表

    目录 前言 项目介绍 技术栈 Flask Web开发流程 一.搭建环境 1.1: 创建虚拟环境 1.2: 安装依赖包 1.3: 创建依赖包列表文件 1.4: 测试hello word 二.应用程序开发 ...

  9. Flask框架搭建REST-API服务

    一.目的 为了能够将测试工具部署成RESTful-API服务,这样就能通过接口的方式提供统一测试工具服务,使用人员就不用构建application而产生的各种环境问题.使用问题. 适合人群:Pytho ...

随机推荐

  1. 爬虫系列(四) 用urllib实现英语翻译

    这篇文章我们将以 百度翻译 为例,分析网络请求的过程,然后使用 urllib 编写一个英语翻译的小模块 1.准备工作 首先使用 Chrome 浏览器打开 百度翻译,这里,我们选择 Chrome 浏览器 ...

  2. Git 基础教程 之 远程库更新到本地

    PS:git remote -v 查看远程仓库        git diff temp 比较master 分支与temp的不同 如果分支没有合并到主分支上,用        git branch - ...

  3. js获取数组中任意一项

    1.获取数组任一项 在一些实际应用场景中,会要求实现一个随机的需求,随机获取某一项,来展示出来,都知道要通过javaScript的Math.random()方法来实现,这里我在Array的原型上添加了 ...

  4. 【习题 4-6 UVA - 508】Morse Mismatches

    [链接] 我是链接,点我呀:) [题意] 给你每个字母对应的摩斯密码. 然后每个单词的莫斯密码由其组成字母的莫斯密码连接而成. 现在给你若干个莫斯密码. 请问你每个莫斯密码对应哪个单词. 如果有多个单 ...

  5. orcale 日期显示格式化

    SQL> select * 2 from emp 3 where hiredate='1987-11-17'; where hiredate='1987-11-17' * 第 3 行出现错误: ...

  6. 转载 - AC自动机算法

    出处:http://blog.csdn.net/niushuai666/article/details/7002823 AC自动机简介:  首先简要介绍一下AC自动机:Aho-Corasick aut ...

  7. HDU 4535

    裸 的错排.... #include <iostream> #include <cstdio> #include <cstring> #include <al ...

  8. POJ 2607

    一次FLOYD,再枚举. 注意题目要求的输出是什么哦. #include <iostream> #include <cstdio> #include <cstring&g ...

  9. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  10. Maven—Windows操作系统中安装配置Maven环境

    今天难得的周末,借此难的机会总结一下关于maven的一些操作: 1.在安装maven之前要确认计算机已经安装并配置了JDK. 2.下载maven: maven-3.0.3:http://downloa ...