flask中的Flask、request、render_temple、redirect和url_for
学flask也有一个多星期了,对这个web框架也有了一点的了解,梳理一些基础的知识点,还是小白一只,代码写得比较low,若文章有错误的地方欢迎大佬随时指正,代码中被注释掉的代码是关于预防csrf,无视即可
主程序脚本:
from flask import Flask, render_template, request, redirect, url_for # from flask_wtf import CSRFProtect app = Flask(__name__) # 声明一个Flask的类,__name__参数的作用是为了确定程序的根目录,以便获得静态文件的模板文件
# app.config["SECRET_KEY"] = "12345678"
#
# CSRFProtect(app) @app.route('/') # @app.router()是一个装饰器,它的作用就是把试图函数(可以简单的理解成就是它下面的函数)与某一个url(后面括号中的部分)绑定,当访问这个url时,就会运行这个视图函数
def Helloworld():
return redirect(url_for('home')) url_for对视图函数进行反转,第一个参数为视图函数名,如果视图函数有参数,可加在后面,返回url,redirect是重定向到括号里面的url,这里为url_for的返回值 @app.route("/regist/", methods=["get", "post"]) # methods指定请求这个url的方法,默认是get,这里指定使用get或post两种方式
def regist():
if request.method == "GET":
return render_template("csrf_regist.html") # render_template对页面进行渲染,如果页面中存在待接受的参数,可将参数放在后面 else:
print(request.form) # 如果请求方式为post,则在后台输出用户输入的信息。request可以获取到前端用户输入的信息,request.args获取get请求,request.form获取post请求 return redirect(url_for('login')) # 对login视图函数进行反转,并进行重定向 @app.route("/login/", methods=["get", "post"])
def login():
if request.method == "GET":
return render_template("csrf_login.html") else:
print(request.form) return redirect(url_for('home')) @app.route('/home/')
def home():
return render_template('csrf_home.html') if __name__ == "__main__":
app.run()
首页(csrf_home.html)代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf首页</title>
</head>
<body>
<h1>欢迎来到首页,请选择登陆或注册</h1>
<a href="{{ url_for('login') }}">登陆</a> # 当用户点击登陆时,跳转到登陆页面
<a href="{{ url_for('regist') }}">注册</a> # 当用户点击注册时,跳转到注册页面
</body>
</html>
注册(csrf_regist.html)代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf的注册页面</title>
</head>
<body>
<form action="", method="post">
<table>
<tbody>
{# <td>#}
{# <input type="text" name="csrf_token", value="{{ csrf_token() }}">#}
{# </td>#}
<td>
<tr>用户名:</tr>
<tr><input type="text" name="username" value=""></tr><br>
</td>
<td>
<tr>密码:</tr>
<tr><input type="password" name="password" value=""></tr><br>
<input type="submit" value="注册">
</td>
</tbody>
</table>
</form>
</body>
</html>
登陆(csrf_login.html)代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf登陆页面</title>
</head>
<body>
<form action="", method="post">
<table>
<tbody>
{# <td>#}
{# <input type="text" name="csrf_token", value="{{ csrf_token() }}">#}
{# </td>#}
<td>
<tr>用户名:</tr>
<tr><input type="text" name="username" value=""></tr><br>
</td>
<td>
<tr>密码:</tr>
<tr><input type="password" name="password" value=""></tr><br>
<input type="submit" value="登陆">
</td>
</tbody>
</table>
</form>
</body>
</html>
flask中的Flask、request、render_temple、redirect和url_for的更多相关文章
- Flask中全局变量的实现
我们都知道在Flask中g,request,session和request是作为全局对象来提供信息的,既然是全局的又如何保持线程安全呢,接下来我们就看看flask是如何做到这点的.在源码中的ctx.p ...
- flask中的上下文_请求上下文和应用上下文
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)
oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...
- flask中的request和response
1.request 1.request的常用成员 1.scheme : 获取请求方案(协议) 2.method : 获取本期请求的请求方式(重点) 3.args : 获取使用get请求方式提交的数据 ...
- 第三篇 Flask 中的 request
第三篇 Flask 中的 request 每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前 ...
- 第二篇 Flask 中的 Render Redirect HttpResponse
第二篇 Flask 中的 Render Redirect HttpResponse 1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返 ...
- 转载 Flask中客户端 - 服务器 - web应用程序 是如何处理request生成response的?
文章转载自https://blog.csdn.net/weixin_37923128/article/details/80992645 , 感谢原作者 当客户端向服务器发送一个请求时,服务器会将请求转 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第三篇 Flask 中的 request 之 先知道有这么个东西
每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第二篇 Flask 中的 Render Redirect HttpResponse
1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返回字符串 2.Flask中的Redirect 每当访问"/redi" ...
随机推荐
- Python学习笔记4 高级特性_20170618
# 切片(获取list / tuple / 字符串 中指定的元素) l = list(range(10)) l[0:3] l[:3] # 0可以省略 l[:] # 全部 l[3:] # 最后的可以省略 ...
- angular跳转和传参
使用routerLink跳转 <a routerLink=["/exampledetail",id]></a> <a routerLink=[&quo ...
- Overload 重载
- Azure CosmosDB (14) 使用Postman访问CosmosDB REST API
<Windows Azure Platform 系列文章目录> 今天研究了一下如何使用Postman访问Azure CosmosDB. CosmosDB API接口,可以参考:https: ...
- docker 更新内存限制步骤
停止容器: docker stop id 更新配额: docker update -m 80G id 内存参数和大小 容器ID重启容器:docker start id
- python接口自动化4-常用取token值方法
前言 在接口测试中我们经常是需要一个登陆token,或者获取其他用到的参数来关联下一个接口用到的参数.这里介绍一些本人常用的方法. 一.简介 不过在哪里我们也是能实现自动化api测试的,我们都知道to ...
- jquery实现移动端页面加载后,向上滚动指定距离无效引起的探索
效果如下,页面加载完后向上滚动一段距离 最近一同事询问用jquery为何无法实现上面效果,查看代码后发现代码并没写错, 也正确引入了zepto.js,也不是版本问题(因为是移动端项目,出于性能和需 ...
- vuex源码分析(二) state及strict属性 详解
state也就是vuex里的值,也即是整个vuex的状态,而strict和state的设置有关,如果设置strict为true,那么不能直接修改state里的值,只能通过mutation来设置 例1: ...
- 成都,我们来啦 | Dubbo 社区开发者日
[关注 阿里巴巴云原生 公众号,回复关键词"报名",即可参与抽奖!] 活动时间:10 月 26 日 13:00 - 18:00 活动地点:成都市高新区交子大道中海国际中心 233 ...
- Netty中的ChannelFuture和ChannelPromise
在Netty使用ChannelFuture和ChannelPromise进行异步操作的处理 这是官方给出的ChannelFutur描述 * | Completed successfully | * + ...