Flask的简单认识

Flask是轻量级的框架,适用于简单的程序

与Django的比较:

Django: 无socket,中间件,路由,视图(CBV,FBV),模板,ORM, cookie,session,缓存,序列化,Form,信号.....

flask:  无socket,中间件(需要扩展),路由,视图(CBV,FBV),第三方模板(jinja2),cookie,session

Flask 的网络通信, 依赖于 werkzeug模块(实现了wsgi协议的模块 )

wsgi

    web 服务网关接口协议

请求    -->>	   socket接听     -->>  web应用

            实现wsgi协议的模块
本质:创建socket监听请求和转发请求

Flask 的启动入口

wsgi.py

    from werkzeug.wrappers import Request, Response

    @Request.application
def hello(request):
return Response('Hello World!') if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, hello) flask from flask import Flask # 实例化Flask对象
app = Flask(__name__) # 生成路由关系,并把关系保存到 app.url_map
@app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run() # 启动程序,监听用户请求
# 一旦请求到来,执行 app._ _call _ _方法
# 封装用户请求
# 进行路由匹配

>**Flask 的路由系统**

(1)装饰器与路由系统 捆绑到一起

常用

@app.route('/')
def hello_world():
return 'Hello World!'

(2) app.add_url_rule('/','hello_world',hello_world)

  def hello_world():
return 'Hello World!' app.add_url_rule('/','hello_world',hello_world)

( 3 ) 带参数的装饰器 -- flask 的路由系统

装饰器

    有参数的装饰器, 形成闭包 把参数传给inner使用

        @app.route('/')
def hello_world():
return 'Hello World!' def route(self, rule, **options):
def decorator(f):
endpoint = options.pop('endpoint', None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator 无参数的装饰器 def wrapper(func):
def inner(*args,**kwargs):
print('hello')
return func(*args,**kwargs)
return inner @wrapper
def func(arg):
print(arg)

Flask 的 render_template

  导入
from flask import render_template 指定模板文件夹
app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static') 返回数据给模板
return render_template('login.html',msg=msg)

Flask 的 request

指定请求方式
@app.route('/login',method=['GET','POST'])
def login():
return render_template('login.html') request的数据
print(request) #<Request 'http://127.0.0.1:5000/login' [POST]>
print(request.query_string)
print(request.args) # get 请求的参数
print(request.values) # 全部的请求参数 CombinedMultiDict([ImmutableMultiDict([('v', '123')]), ImmutableMultiDict([])])
print(request.form) # post 请求的参数

Flask 的 静态文件

配置 static文件目录,和 path

   app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')

src
"{{ url_for('static',filename='1.png') }}"
"/static/1.png"

Flask 的 session -- secret key配置

session (所有的都放到浏览器) | django的session 是放在服务端
session_id -- cookie
放在浏览器,减轻服务端压力 app.config['SECRET_KEY'] = 'sadsada2321312' # 用serect_key 加盐加密

登录小 demo

from flask import Flask,render_template,request,session,redirect

app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')
app.config['SECRET_KEY'] = 'sadsada2321312' @app.route('/',methods=['GET'])
def hello_world():
user = session.get('user','')
if user:
return 'Hello World!'
else:
return redirect('/login') @app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
user = request.values.get('user')
if user:
session['user'] = user
return redirect('/')
else:
msg = '用户名密码错误'
return render_template('login.html',msg=msg) if __name__ == '__main__':
app.run()

Flask的简单认识的更多相关文章

  1. 使用Flask开发简单接口

    作为测试人员,在工作或者学习的过程中,有时会没有可以调用的现成的接口,导致我们的代码没法调试跑通的情况. 这时,我们使用python中的web框架Flask就可以很方便的编写简单的接口,用于调用或调试 ...

  2. Python: Flask框架简单介绍

    接触Python之后我第一次听说Flask,我就根据自己搜罗的知识尽可能简洁的说出来.如果不准确的地方还请指正,谢谢. Flask是什么?             Flask是基于Python编写的微 ...

  3. Flask实现简单的群聊和单聊

    Flask是使用python写的一个简单轻量级的框架,今天我们使用Flask实现一个简单的单聊和群聊功能 . 主要思路 : 前端登录聊天室,聊天室信息包含用户的登录信息,相当于一个登录功能,会把这个信 ...

  4. flask 完成简单查询请求处理,及跨域

    文章大纲 flask通用项目结构 flask 简介 主体代码逻辑 flask 跨域问题的处理 flask 日志 flask 微服务Flask-RESTful 启动服务命令 flask通用项目结构 | ...

  5. 使用Flask开发简单接口(1)--GET请求接口

    前言 很多想学习接口测试的同学,可能在最开始的时候,常常会因没有可以练习的项目而苦恼,毕竟网上可以练习的接口项目不多,有些可能太简单了,有些可能又太复杂了,或者是网上一些免费接口请求次数有限制,最终导 ...

  6. 使用Flask开发简单接口(2)--POST请求接口

    今天我们继续学习如何使用Flask开发POST接口:用户注册接口和用户登录接口. request接收参数 当我们在页面发出一个POST请求,请求传到服务器时,需要如何拿到当前请求的数据呢?在Flask ...

  7. 使用Flask开发简单接口(3)--引入MySQL

    前言 前面的两篇文章中,我们已经学习了通过Flask开发GET和POST请求接口,但一直没有实现操作数据库,那么我们今天的目的,就是学习如何将MySQL数据库运用到当前的接口项目中. 本人环境:Pyt ...

  8. 利用flask 实现简单模版站

    from flask import Flask,render_template from flask import request app = Flask(__name__) @app.route(' ...

  9. flask的简单使用

    一.Flask中的CBV from flask import Flask, render_template from flask import views app = Flask(__name__, ...

随机推荐

  1. js 实现无限加载分页(适合移动端)

    一.原理:当滚动条到达底部时,执行下一页内容. 判断条件需要理解三个概念:    1.scrollHeight 真实内容的高度    2.clientHeight 视窗的高度,即在浏览器中所能看到的内 ...

  2. sql join on 与where

    转载:http://www.cnblogs.com/Jessy/p/3525419.html left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join : ...

  3. 转:zero length array问题

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  4. Spring框架学习之IOC(一)

    Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...

  5. powerdesigner解决创建多个表表主键名称重复的问题

    选择菜单栏的tools选项,选择Model  Options..,选择Model Settings  只要将图片中的选择打钩去掉即可(操作步骤1),同时设置为默认选项(操作步骤2),防止以后问题又出现 ...

  6. Javascript中call()和apply()的用法 ----1

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  7. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...

  8. 什么是“欧几里德范数”(Euclidean norm)?

    x是n维向量(x1,x2,…,xn),||x||=根号(|x1|方+|x2|方+…+|xn|方) 补充:开平方,跟几何一样

  9. Python 文件操作综合案例

    # 案例 # 文件的复制 # 要求 # 将一个文件, 复制到另外一个副本中 # 步骤分析 # 1. # 只读模式, 打开要复制的文件 import os import shutil path = &q ...

  10. [CF]Cycling City

    题目大意:给定一张无向图,问图中是否存在两个点,使得这两个点之间有三条路径,而且三条路径没有公共点. 解法: 我们可以先走出来一个环,再出环上任意一点走到另外一点.就像这样: