1.flask基础
1.flask和django的区别?
flask,是一个轻量级的框架,内置了:路由/视图/模板(jinja2)/cookie/session/中间件. 可扩展强,第三方组件非常多,例如:wtforms/flask-session/flask-sqlalchemy.
django,是一个重武器,django内置了很多功能方便我们使用,例如:admin/orm/模板/form/modelform/session/cookie/中间件/路由/缓存/信号/数据库的读写分离/分页...
flask,短小精悍可扩展强.
django,大而全重武器.
django好还是flask好?
小程序,flask比较好.
中大型,django比较好.
2.快速入门
pip3 install flask
2.1 werkzurg
werkzurg是一个wsgi,本质上提供了socket服务端,用于接收用户请求.
django和flask一样,它们内部都没有实现socket服务端,需要依赖wsgi.
- django, wsgiref
- flask, werkzurg
2.1.1 wsgiref实现一个网站
from wsgiref.simple_server import make_server
class WSGIHandler(object):
def __call__(self,environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
if __name__ == '__main__':
obj = WSGIHandler()
httpd = make_server('127.0.0.1', 8000, obj)
httpd.serve_forever()
2.1.2 werkzeug实现一个网站
from werkzeug.wrappers import Response
from werkzeug.serving import run_simple
class Flask(object):
def __call__(self,environ, start_response):
return Response('Hello World!')(environ, start_response)
if __name__ == '__main__':
app = Flask()
run_simple('127.0.0.1', 5000, app)
2.2flask程序
from flask import Flask
# 实例化了一个Flask对象
app = Flask(__name__)
# 添加路由关系
@app.route('/index')
def index():
return '你好'
if __name__ == '__main__':
# 启动服务端
app.run()
3.flask用户登录实例
关于返回值
from flask import Flask,render_template,request,redirect app = Flask(__name__) @app.route('/login',methods=['GET','POST'])
def login():
return "xxx"
return render_template('模板文件',参数)
return redirect(...)
return jsonify({"k1":123})
if __name__ == '__main__':
app.run()
关于模板
默认放在根目录的tempaltes
关于用户请求
request.method
request.form # POST
request.args # GET
session
加密的形式放在用户浏览器的cookie中.
from flask import Flask,render_template,request,redirect,jsonify,url_for,session app.secret_key = "29ualknd872iuknsdgf"
def auth(func):
@functools.wraps(func)
def inner(*args,**kwargs):
user = session.get('user_info')
if not user:
return redirect(url_for('login'))
return func(*args,**kwargs)
return inner @app.route('/login',methods=['GET','POST'])
def login(): if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'alex' and pwd == 'dsb':
# 在session中存储一个值
session['user_info'] = user return redirect(url_for('index'))
return render_template('login.html',error="用户名或密码错误")
在flask视图中添加装饰器
位置route的下面
记得加functools.wraps(...) , 保留函数的元信息.
from flask import Flask,render_template,request,redirect,jsonify,url_for,session app.secret_key = "29ualknd872iuknsdgf"
def auth(func):
@functools.wraps(func)
def inner(*args,**kwargs):
user = session.get('user_info')
if not user:
return redirect(url_for('login'))
return func(*args,**kwargs)
return inner
@app.route('/index')
@auth
def index():
user_list = ["庄伯","亮哥",'实验']
user_info_list = [
{"name":'庄伯','age':18},
{"name":'亮哥','age':15},
{"name":'实验','age':18},
]
return render_template('index.html',user_list=user_list,user_info_list=user_info_list)
特殊装饰器:before和after request装饰器
from flask import Flask,render_template,request,redirect,jsonify,url_for,session
import functools
app = Flask(__name__) app.secret_key = "29ualknd872iuknsdgf" @app.before_request
def f1():
print('f1') @app.before_request
def f11():
print('f11') @app.after_request
def f2(response):
print('f2')
return response @app.after_request
def f22(response):
print('f22')
return response @app.route('/login')
def login():
print('login')
return 'Login' @app.route('/index')
def index():
print('index')
return 'index' if __name__ == '__main__':
app.run() '''
f1
f11
login
f22
f2
'''
1.flask基础的更多相关文章
- flask基础之AppContext应用上下文和RequestContext请求上下文(六)
前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...
- flask基础之请求处理核心机制(五)
前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask ...
- flask基础之app初始化(四)
前言 flask的核心对象是Flask,它定义了flask框架对于http请求的整个处理逻辑.随着服务器被启动,app被创建并初始化,那么具体的过程是这样的呢? 系列文章 flask基础之安装和使用入 ...
- flask基础之jijia2模板语言进阶(三)
前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...
- flask基础之jijia2模板使用基础(二)
前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...
- 笔记-flask基础操作
笔记-flask基础操作 1. 前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2. 开发环境配置 2.1. 编译环境准备 安装相关Lib ...
- Flask基础(16)-->WTForms表单创建和简单验证
Flask基础(16)-->WTForms表单创建和简单验证 前言:使用Flask_WTF需要配置参数SECRET_KEYCSRF_ENABLED是为了CSRF(跨站请求伪造)保护.SECRET ...
- Flask基础(14)-->自定义过滤器
Flask基础(13)-->自定义过滤器 什么是过滤器? 过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 P ...
- Flask基础(13)-->Flask扩展Flask-Script
Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
随机推荐
- NOIP原题 斗地主(20190804)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
- Java实现不遍历数组求和
package com.jts.t1; /** * 不遍历数组求和 * 方法省略异常检查 */ public class Demo1 { public static void main(String[ ...
- windows下载安装swoole的方法
windows下载安装swoole的方法先安装Cygwin 选择163镜像(速度非常快) add url http://mirrors.163.com/cygwin/ 然后安装gcc php pcre ...
- 比较器中的comparing方法以及涉及到的知识
今天在学习Java核心技术集合程序清单9-3时遇到了问题. 代码如下 public class TreeSetTest { public static void main(String[] args) ...
- Matlab 文件格式化/Matlab Source File Formator
由于需要使用到别人编写的Matlab代码文件,但是呢不同的人有不同的风格,有的写得就比较糟糕了. 为了更好地理解代码的内容,一个比较美观的代码会让人身心愉悦. 但是在网上并没有找到一个比较好的实现,此 ...
- hdu 1285 确定比赛名次 (topsort)
确定比赛名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 在校生如何面向面试地学习Java
最近我在博客园里,看到不少在校的同学在学java,而且,在我最近举办的一次直播活动中,也有不少在校生同学来提问,java该怎么学. 对于那些已经工作的同学,哪怕才工作不久,毕竟也能从项目实践里总结和探 ...
- LeetCode51 N皇后——经典dfs+回溯(三段式解法)
代码如下: class Solution { public: // record[row] 该行对应的列 vector<vector<string> > ans; // 结果集 ...
- opencv 5 图像转换(3 重映射 仿射变换 直方图均衡化)
重映射 实现重映射(remap函数) 基础示例程序:基本重映射 //---------------------------------[头文件.命名空间包含部分]------------------- ...
- Java虚拟机详解(十)------类加载过程
在上一篇文章中,我们详细的介绍了Java类文件结构,那么这些Class文件是如何被加载到内存,由虚拟机来直接使用的呢?这就是本篇博客将要介绍的——类加载过程. 1.类的生命周期 类从被加载到虚拟机内存 ...