Flask框架函数
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框架函数的更多相关文章
- flask框架基本使用(4)(钩子函数,异常,命令行运行)
flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html flask 框架基本使用(2):https://www.cnblogs. ...
- Flask 框架入门
Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...
- Python自动化运维之30、Flask框架
Flask 官网:http://flask.pocoo.org/ flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...
- 2nd_SE-结对编程1-基于flask框架的四则运算生成器
0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...
- Flask框架
FLask框架的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...
- flask 视图函数的使用
flask框架 视图函数当中 各种实用情况简单配置 1 建立连接 2 路由参数 3 返回网络状态码 4 自定义错误页面 5 重定向 6 正则url限制 和 url 优化 7 设置和获取cookie # ...
- Flask框架(1)--基础
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- Flask框架搭建一个日程表
目录 前言 项目介绍 技术栈 Flask Web开发流程 一.搭建环境 1.1: 创建虚拟环境 1.2: 安装依赖包 1.3: 创建依赖包列表文件 1.4: 测试hello word 二.应用程序开发 ...
- Flask框架搭建REST-API服务
一.目的 为了能够将测试工具部署成RESTful-API服务,这样就能通过接口的方式提供统一测试工具服务,使用人员就不用构建application而产生的各种环境问题.使用问题. 适合人群:Pytho ...
随机推荐
- php进程daemon化的正确做法
[原文地址:https://blog.ti-node.com/blog...] daemon 音标 : ['di:mən] , 中文含义为守护神或精灵的意思 . 其实它还有个意思 : 守护进程 . 守 ...
- HTML <area> 对象
<area>对象的属性 属性 描述 W3C alt 设置或返回当浏览器无法显示某个区域时的替换文字. Yes coords 设置或返回图像映射中可点击区域的坐标. Yes hash 设置或 ...
- 数位dp题集
题集见大佬博客 不要62 入门题,检验刚才自己有没有看懂 注意一些细节. 的确挺套路的 #include<bits/stdc++.h> #define REP(i, a, b) for(r ...
- Docker 搭建 ELK 读取微服务项目的日志文件
思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...
- lucene_06_solr域
solr域在家目录下面\solr_home\collection1\conf中的schema.xml里面定义. 域必须要先在schema.xml下定义后才能使用. solr在操作Field域时需要在s ...
- [bzoj1552\bzoj2506][Cqoi2014]robotic sort 排序机械臂_非旋转Treap
robotic sort 排序机械臂 bzoj-1552 bzoj-2506 Cqoi-2014 题目大意:给定一个序列,让你从1到n,每次将[1,p[i]]这段区间反转,p[i]表示整个物品权值第i ...
- [React] Capture values using the lifecycle hook getSnapshotBeforeUpdate in React 16.3
getSnapshotBeforeUpdate is a lifecycle hook that was introduced with React 16.3. It is invoked right ...
- 【转】HDFS读写流程
概述开始之前先看看其基本属性,HDFS(Hadoop Distributed File System)是GFS的开源实现. 特点如下: 能够运行在廉价机器上,硬件出错常态,需要具备高容错性流式数据访问 ...
- Unity3D 射线指定层获取GameObject 注意 LayerMask
这一篇是纯技术讨论,看过我前面文章的童鞋应该清楚,我的奔跑是靠鼠标响应的,鼠标点到哪就跑到哪,后来又有了界面,麻烦就来了,我的界面居然能点 穿.我不希望点界面的时候还能点到界面后面的地面上,角色傻不拉 ...
- HDU 5380 Travel with candy 单调队列
pid=5380">链接 题解链接:http://www.cygmasot.com/index.php/2015/08/16/hdu_5380 题意: n C 一条数轴上有n+1个加油 ...