Flask介绍

框架做了些什么

服务端按照职责仔细划分,可以分为服务器+框架,服务器server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端。框架处理的工作是接收由server转发的request,处理请求,并将处理结果返回给server。其中server和框架之间定义了一种通信规范,叫wsgi协议。
所以,框架一般只做路由分发和视图处理,但是也有例外,比如tornado就自己实现了服务器的功能。
做一下总结,在web开发中程序员写代码相当于站在flask框架这个人的肩膀上,而flask这个框架程序的实现又是基于实现了wsgi的socket服务端程序的,比如werkzurg.

werkzurg

from werkzeug.serving import run_simple
from werkzeug.wrappers import Request, Response

@Request.application
def run(request):
    return Response('hhh')

if __name__ == '__main__':
    run_simple('', 5000, run)

框架对比

框架都有的一个功能就是路由分发。这也是框架最基础的功能。从框架的轻质来分:
重量级框架: 如Django,除了实现路由,还实现自己的template,为了操作数据库方便还有自己的orm,功能全。但是不易自定制,例如想要更换内置的orm,因为框架内部依赖比较紧密,所以牵一发而动全身。
轻量级框架:如Flask,核心就是基于weekzurg的路由,模版用的是第三方的jinja2,没有自己的orm,可以借助第三方,如sqlalchemy。要用什么完全由开发者决定。

基本使用

from flask import Flask

app = Flask(__name__)

@app.route("/")
def idnex():
    return 'index'

if __name__ == '__main__':
    app.run()

对于这个最基本的程序,有几点需要说明:

  1. 导入包的时候最好不要使用from flask import *,PEP8不建议这么做,最直观的感受是看代码的人不知道程序的模块到底来自哪个包
  2. 用FLask类实例化的时候传入了__name____name__的含义是模块名,Flask类有默认的static参数,当我们在浏览器输入http:127.0.0.1:5000/static/index.html', flask框架怎么知道去哪个目录下找index.html这个文件呢?答案就是这里的name, 根据name得到的模块名所在的目录,把这个目录当作根目录,flask会去这个根目录下寻找静态目录的静态文件。如果随便写了一个不存在的模块,如app=Flask('qwewq')`,那么flask会自作主张就把当前py文件所在目录当作根目录。
  3. app.run 这个方法是开启一个简单的服务器,在实际生产中这一步会被替换的
  4. 我们在浏览器输入http:127.0.0.1:5000/static/index.html',flask当拿到请求的url看到前缀是和static_url_path`设置的一样时,就会去静态目录去找文件而不走路由
  5. django项目的py文件放置位置大体是固定的,但是flask项目文件的组织形式由开发者来定

linux安装虚拟环境

虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:$ virtualenv --version
安装虚拟环境:

$ pip install virtualenv
$ pip install virtualenvwrapper

安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:

# 1、创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs

# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 3、运行
source ~/.bashrc

创建虚拟环境:mkvirtualenv flask_test
进入虚拟环境:$ workon flask_test
退出虚拟环境: 如果所在环境为真实环境,会提示deactivate:未找到命令 $ deactivate Flask_py

posted @ 2018-08-07 09:48  龙云飞谷  阅读(206)  评论(0编辑  收藏  举报