Flask

FLASK

标签(空格分隔): python flask web

[TOC]


计划

  • [ ] python学习
  • [ ] 数据库安装
  • [ ]

架构

client(HTTP请求)

模板

JinJa2

模板的简单使用

条件语句

{% if xxx%}
{% else %}
{% endif %}

循环语句

{% for user in users%}
{{user.id}} {{user.name}}
{% endfor %}

模板的继承

#基类 base.html文件
<html>
    xxxx
        {% block content %}
        {% end block %}
    xxxxx
</html>
#子类
{% extends "base.hmtl" %} #扩展基类
{% block content %}       #实现子类独有部分
    xxx
{% end block %}

class User(object):
    def __init__(self, name, id):
        self.name = name
        self.id = id
from flask import render_template
#module.py文件导入user类
from module import User
app = flask(__name__)
@app.route('/user')
def user():
    user = User("brezen",1)
    return render_template('user_index.html', user=user)
<h1>{{user.name}}</h1>

MVC

module
view
control
Files DB

nginx

nginx是web服务器

安装

使用

  • 1, 查看状态
    sudo service nginx status

WSGI

WSGI(python web server getway interface)
定义了web服务器和web应用之间的接口规范
clinet<----------->server<=WSGI=>APP

FLASK框架就是一个WSGI的app应用

WSGI Server有哪些:

比如 Flask,webpy,Django、CherryPy 都带着 WSGI server 。当然性能都不好,自带的web server 更多的是测试用途, 发布时则使用生产环境的 WSGI server或者是联合nginx做uwsgi 。

常用的WSGI服务器器

  • Gunicorn
  • uWSGI
  • CherryPy
  • Tornado
  • Gevent
  • mod_wsgi

gunicorn

flask 自带的服务器,完成了 web 服务的启动。生产环境下,flask 自带的 服务器,无法满足性能要求。我们这里采用 gunicorn 做 wsgi容器,用来部署 python。

前端Nginx负载,几个核就跑几个Gunicorn进程,gunicorn相对后面的app又可以给出几个进程。

virtualenv

解决问题:

1,python版本问题
2,依赖问题
3,权限问题
linux系统权限要求高,安装文件比较麻烦,但是

安装

sudo pip install virtualenv

创建虚拟环境

virtualenv venv(名字,随便写的)

启动虚拟环境

source venv/bin/activate

关闭虚拟环境

deactivate

POSTMAN

测试HTTP方法

supervisor

管理多个python web app应用,一个部署在80端口,另外一个部署在81端口。

安装

sudo apt-get install supervisor

使用

  • 1,通过配置文件,启动应用程序
    总的配置文件在/etc/supervisor目录下,这个文件通过包含
    /etc/supervisor/conf.d/*.conf
    #配置文件内容
    #应用名称
    [program: app] 
    #应用命令行
    ###############通过python 启动py应用
    command = python /home/sbin/xxx.py

supervisor配置说明
注意:如果有多个应用,可以在目录下增加多个conf文件

  • 2,使用supervisoctrl控制台,控制应用程序
  • 3, 启动supervisor
    sudo service supervisor start
  • 4,进入supervisorctl控制台
    sudo supervisorctl
    会列出启动的app
    #启动应用程序
    start app
    #停止应用程序
    stop app
    #查看应用程序状态
    status
http://local/user?id=xxx
request.args.get('id')

反向路由

from flask import Flask, request, url_for
##视图
@app.route('/query_user')
##视图函数
def query_user():
    id = request.args.get('id')
@app.route('query_url')
def query_url():
    ###反向路由
    return 'query_url' + url_for('query_user')

安装应用依赖包

pip install -r requiment.txt
注意:这个依赖包不是指webserver工具或者db工具,而是应用依赖的一些库文件。
pip list 查看已经安装的库

部署步骤

安装
vitualenv, supervisor, db,
创建虚拟环境
激活虚拟环境
配置nginx服务器

    在/etc/nginix/sites.avaliable下创建配置文件
    在/etc/nginix/sites.enable下创建配置文件的软连接

启动ngnix服务器

    sudo service ngnix reload
    如果启动失败,可以查看ngnix服务器的日志

配置supervisor

    因为在虚拟环境中,所以配置命令有所改变,通过虚拟命令来启动
    command = /home/sbin/Todo/venv/bin/gunicorn b 127.0.0.1:9000
    其中`/home/sbin/Todo/venv/`表示用户启用的虚拟环境的路径

进入supervisorctl控制台启动程序

部署flasky

安装virtualenv

安装supervisor

echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件

安装gunicorn

gunicorn -w4 manage:app

安装nginx

配置nginx

/etc/sites-avaliable下新建一个配置文件

    

并建立配置文件的软连接到/etc/nginx/site-enable/目录下

启动nginx

sudo service nginx start
sudo service nginx reload
查看启动错误日志
/var/log/nginx/error.log

CGI

客户端(提交表单请求)------>服务器
服务器<--------------------->外部程序
(服务器和外部程序交互完成,生成一个新的HTML)
客户端<---------------------服务器(将新的HTML返回给客户端)

以上这个过程发生在服务器CGI(common gateway interface)接口上的。

bluePrint(蓝图)

为什么要使用蓝图

  • 1,程序模块化
  • 2,集中注册入口,统一管理
  • 3,每个模块可以统一使用各自URL前缀
  • 4,每个模块可以使用各自的模板

如果所有的路由都放到一起,那么对于大型程序来说,将面临以下问题:

  • 1)一般情况下,前台和后台用两套模板。或者通俗的讲,前台费力弄得好看点,后台反正自己用,能用就成,丑点无所谓。那么怎么让前台和后台用两套模板?
  • 2)后台部分逻辑比前台复杂,还需要导入新的包,如果和前台写在一个文件里,后面修改会不会容易出错,例如本来改后台部分结果牵连前台出问题?
  • 3)既然Python力求简洁,那代码能否再简洁些?比如新增的路由参数 /admin 重复写了4遍,能不能对后台定义一个前缀,后台部分的自动加这个/admin ?
  • 4)如果这个博客程序需要多人来维护,多人编辑同一个文件去提交时冲突如何解决?

问题4,import …… ,这样不就模块化了?

网站

FLASK主页
KT-WEB个人开发的网站
Flasky图灵图书里的例子
flask中文学习网
Virtualenv+Gunicorn+Supervisor+Nginx环境搭建
环境部署,详细说明
bluePrint

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容