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文件

    xxxx
        {% block content %}
        {% end block %}
    xxxxx

#子类
{% 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)

{{user.name}}

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

你可能感兴趣的:(Flask)