Flask
How to build socketio in Flask project : socketio
Flask variable, blueprint and install from requirement.txt, some basic knowledge about WSGI, Nginx and Django.
Reference
NAME | URL | DESCRIPTION |
---|---|---|
flask_socketio | https://github.com/miguelgrinberg/flack | a project using flask_socketio |
https://flask-socketio.readthedocs.io/en/latest/ | flask_socketio official tutorial | |
blueprint | http://flask.pocoo.org/docs/1.0/blueprints/ | official tutorial |
SocketIO
pip install flask-socketio
Flask Structure
application context and request context:
variable | context | description |
---|---|---|
current_app | application context | The application instance for the active application. |
g | ac | |
request | request context | |
session | rc |
from flask import current_app
g
is a special object that is unique for each request. It is used to store data that might be accessed by multiple functions during the request. The connection is stored and reused instead of creating a new connection if get_db
is called a second time in the same request.
Blueprint
Tutorial : Modular Applications with Blueprints
We use the create_app()
so that the application is created at runtime.
A blueprint is similar to an application in that it can also define routes. The difference is that routes associated with a blueprint are in a dormant state until the blueprint is registered with an application, at which point the routes become part of it.
# app/main/__init__.py
from flask import Blueprint
main = Blueprint('main', __name__)
The constructor for this class takes two required arguments: the blueprint name and the model or package where the blueprint is located(always default __name__
).
Virtual environment
installation
Take Linux system as example:
pip install virtualenv
usage
cd [project directory]
virtualenv venv
该命令执行后,将在当前目录中建立一个venv目录,该目录复制了一份完整的当前系统的python环境。之后运行python时可以直接运行该项目的bin文件夹中的命令。
例:在当前虚环境下安装Tornado组件:
./venv/bin/pip install tornado
或者在该虚环境中运行python程序:
./venv/bin/python xxxx.py
也可以使用activate
命令启动虚环境,之后不必再显示地调用虚环境bin文件夹中的命令:
source ./venv/bin/activate
退出虚拟环境使用deactive
:
(venv) xxx:~/xxx$ deactivate
requirement.txt
Install from requirement.txt
:
pip install -r requirements.txt
generate a requirement.txt
from current project:
pip freeze > requirement.txt
pipenv
目前流行的取代 virtual envirment 的方式就是 pipenv
Install pipenv:
pip install pipenv
pipenv shell
pipenv install package-name
# if you want lock the environment
pipenv lock
退出可以使用 exit
或者 Ctrl+D
.
Video Streaming with Flask
Flask Script
# manage.py
import os
from app import create_app, db
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
Web Server
目前主流的Web服务器包括Nginx, Apache, lighthttpd, IIS, etc..,Python服务端程序在Linux平台下使用最广泛的是Nginx。
WSGI
Web Server Gateway Interface[1], 为Python语言定义Web服务器和服务端程序的通用接口规范。
Nginx
sudo apt-get install nginx
sudo service nginx start/status/stop/restart
Django
Installation
pip3 install django
测试是否安装成功:
python3
>>> import django
>>> print(django.VERSION)
Establish application
建立项目:
django-admin startproject [project-name]
建立应用:
python manage.py startapp [app-name]
例如,在当前目录中创建一个项目my_project, 并且拥有特定的目录结构:
djangp-admin startproject my_project
cd my_project
python3 manage.py startapp my_app
完成之后目录结构类似于:
my_project/
manage.py
my_project/
__init__.py
settings.py
urls.py
wsgi.py
my_app/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
内置web服务器运行:
python manage.py runserver 0.0.0.0:8001
生成数据移植文件:
python manage.py makemigrations app
移植到数据库:
python manage.py migrate
New Words
words | means |
---|---|
PK | primary key |
FK | foregin key |
CRUD | create, retrieve, update and delete |