flask小例
#写一个app.py,处理3个URL:
'''
GET / : 首页,返回Home;
GET /signin:登录页,显示登录表单;
POST /signin: 处理登录表单,显示登录结果。
'''
#注意,同一个URL/signin 分别有GET和POST两种请求,映射到两个处理函数中。
#Flask通过Python的装饰器在内部自动地把URL和函数给关联起来:
from flask import Flask #First we imported the Flask class. An instance of this class will be our WSGI application.
from flask import request
app=Flask(__name__)
#创建了一个Flask实例. 第一个参数是 这个应用的模块(module)或包(package)的名字
#如果你使用单个模块,第一个参数就应该是 __name__ because depending on if it's started as application or
#imported as module the name will be different('__main__' versus the actual import name).this is needed so that Flask knows where to look
#for templates,static file,and so on .
@app.route('/',methods=['GET','POST'])
#route() decorator 告诉 Flask 什么URL 指向该功能/函数 .
#http 有不同的响应方式对于URLs.默认的是GET ,可以通过提供参数methods的值来改变,可能的值有 GET HEAD POST PUT DELETE OPTIONS
def home():
return '<h1>Home</h1>'
@app.route('/signin',methods=['GET'])
def signin_form():
return '''
<form action="/signin" method="post">
<p><input name="username"></p>
<p><input name="password" type="password"></p>
<p><button type="submit">Sign In</button></p>
</form>'''
@app.route('/signin',methods=['POST'])
def signin():
#需要从request对象读取表单内容:
if request.form['username']=='admin' and request.form['password']=='password':
return '<h3>Hello,admin!</h3>'
return '<h3>Bad username or password.</h3>'
if __name__=='__main__':
app.run()
#运行python flask_1.py,Flask自带的Server在端口5000上监听:
#打开浏览器,输入首页地址http://localhost:5000/ ,显示首页
#输入http://localhost:5000/signin,会显示登录表单,输入预设的用户名admin和口令password,登录成功,输入其他错误的用户名和口令,登录失败
'''
除了Flask,常见的Python Web框架还有:
Django:全能型Web框架;
web.py:一个小巧的Web框架;
Bottle:和Flask类似的Web框架;
Tornado:Facebook的开源异步Web框架
'''
'''
有了Web框架,我们在编写Web应用时,注意力就从WSGI处理函数转移到URL+对应的处理函数,这样,编写Web App就更加简单了。
在编写URL处理函数时,除了配置URL外,从HTTP请求拿到用户数据也是非常重要的。Web框架都提供了自己的API来实现这些功能。
Flask通过request.form['name']来获取表单的内容。
'''
from flask import Flask ,render_template
app=Flask(__name__)
@app.route('/')
def hello():
return '欢迎光临,你好!'
@app.route('/about')
def about():
return '这是一个使用Flask建立的小网站测试'
@app.route('/user/')
@app.route('/user/<username>')
def show_user(username=None):
return render_template('show_user.html', name=username)
if __name__ == '__main__':
app.run()
http://127.0.0.1:5000/user/tony,输入这个链接,tony会作为入参放在username中。
flask也提供了网页模板功能(采用Jinja2模板引擎),让开发者把一些固定的使用的.html文件放在templates目录下。
从网站上读取数据(首先要建立一个窗体的网页,使用request模块获取窗体内的数据):
@app.route('/login',methods=['POST','GET'])
def login():
error=None
if request.method=='POST':
username=request.form['username']
password=request.form['password']
...处理用户验证的程序代码...
return render_templates('login.html',error=error)
flask小例的更多相关文章
- linux 命令小例
xargs示例: ls |xargs -i mv {} /opt find示例: find -mtime +n -name “*.avi” -type f -exec rm {} \; find - ...
- Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例
Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例 一.在Eclipse下编译安装Hadoop插件 Hadoop的Eclipse插件现在已经没有二进制版直接提供,只能自己编译. ...
- 使用libcurl下载文件小例
libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP……一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要 ...
- webpack -- 多页面简单小例
有时单页面并不能满足我们的业务需求,就需要去构建多页面应用,以下为简单小例: entry:{ index:'./src/module/index/index.js', student:'./src/m ...
- Flask小总结+实例化Flask参数以及对app的配置
Flask 小而精 三方组件全 稳定性相对较差 1.启动: from flask import Flask app = Flask(__name__) app.run("0.0.0.0&qu ...
- [libpng]CMake+VS2015下编译libpng,及使用小例
编译前的工作 在编译libpng前,需要把zlib编译好,并加载到编译环境里. CMake + VS2015 下编译zlib,及使用小例 下载与解压 libpng的官网是 http://www.lib ...
- python flask 小项目
0 开始之前 网上看了很多教程,都不是很满意,因此自己写一个大型教程,从入门到做出一个比较完整的博客.此次教程不是直接把整个博客直接代码整理出来然后运行一遍就完事,我会从flask的各个模块讲起.所以 ...
- HTML5基础小结(二)——标签小例
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhaGFuNjI5NjI5/font/5a6L5L2T/fontsize/400/fill/I0 ...
- js入门学习~ 运动应用小例
要实现的效果如下: 鼠标移入各个小方块,实现对应的效果(变宽,变高,移入透明,移出恢复)~~ (且各运动相互之前不干扰) 主要是练习多个物体的运动框架~~ --------------------- ...
随机推荐
- English trip V1 - 10.Family Ties 家庭关系 Teacher:Emily Key: Possessive s (所有格 s)
In this lesson you will learn to talk about people in a family. 课上内容(Lesson) What are you Spring Fes ...
- LeetCode--303--区域和检索 - 数组不可变
问题描述: 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, -5, 2, -1 ...
- Vue.js示例:树型视图; 模式组件;
树型图 本示例是一个简单的树形视图实现,它展现了组件的递归使用. mycode pen:https://codepen.io/chentianwei411/pen/KGKQxE 重点:递归是如何形成的 ...
- HTML 弹出遮罩层一(遮罩层和内容标签嵌套)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CF438D 线段树 区间求和,区间求膜,单点更新
题目链接 题目大意: 给定一个长度为n的序列,要求能够执行m次下列操作: 1.查询区间[l,r]的和 2.将区间[l,r]的每一个数%=mod 3.修改第x个数为y 操作1,3都是线段树的基本操作,线 ...
- 第二阶段——个人工作总结DAY06
1.昨天做了什么:昨天做完了修改密码的界面.(有点丑) 2.今天打算做什么:今天制作时间轴. 3.遇到的困难:无.
- tcpcopy真实流量压测工具
https://quentinxxz.iteye.com/blog/2249799 http://blog.chinaunix.net/uid-25057421-id-5576741.html htt ...
- hdu-1817-polya
Necklace of Beads Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- OpenStack设计与实现5——RESTful API和WSGI
转https://segmentfault.com/a/1190000004361778 Tips:文章为拜读@xingjiarong 后有感而做的分享,先对作者表示感谢,附原文地址:http://b ...
- HDFS shell操作及HDFS Java API编程
HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...