一、django组件
- socket-------无,使用wsgi
- 中间件
- 路由系统
- 视图
- 模板引擎
- 模板语言
- cookie
- session
- csrf
- xss
- 缓存
- 信号
- Form
- Admin
- ORM
二、tornado组件
- socket-------有,自带
- 中间件-------无
- 路由系统
- 视图
- 模板引擎
- 模板语言--------有,uimethod,uimodule
- cookie
- session-------无
- csrf
- xss
- 缓存-------无
- 信号-------无
- Form-------无
- Admin-------无
- ORM-------无
2.1 程序启动
1 import tornado.ioloop 2 import tornado.web 3 from settings import SETTINGS 4 from views import login 5 6 7 application = tornado.web.Application([ 8 (r"/login", login.LoginHandler), 9 (r"/index", login.IndexHandler), 10 ],**SETTINGS 11 ) 12 13 14 if __name__ == "__main__": 15 application.listen(8888) 16 tornado.ioloop.IOLoop.instance().start()
2.2 路由系统
application = tornado.web.Application([ (r"/login", login.LoginHandler,{要传给视图的函数},反向生成urlname), (r"/index", login.IndexHandler), ],**SETTINGS )
2.3 视图函数
class LoginHandler(RequestHandler): def get(self, *args, **kwargs): self.render("login.html",msg="")self的方法
self.application.reverse_url("name","arg1") #反向生成url self.write()
self.render("login.html",msg="用户名或密码错误")
self.redirect()
self.get_argument() #取get和post里的数据
self.get_query_argument() #取get里的数据
self.get_body_argument() #取post里的数据
#####cookie#######
self.set_cookie()
self.set_secure_cookie() 配置里"cookie_sercet":"salt..."
2.4 配置文件
settings = { "template_path":"template", #模板路径 "static_path":"static", #静态文件路径 "static_url_prefix":"/static/" }
2.5 xsrf
{%raw xsrf_form_html()%}
配置里
"xsrf_cookies":True
2.6 模板语言
{%for item in user_list%} {{item["user"]}} {%end%} #######引入css、js文件######## <link rel="stylesheet" href="{{ static_url('common.css') }}">
三、flask组件
- socket-------无
- 中间件
- 路由系统
- 视图
- 模板引擎
- 模板语言
- cookie
- session------有,但使用的是加密cookie,保存在客户端
- csrf
- xss
- 缓存
- 信号-------无
- Form-------无,有扩展插件WTForms
- Admin-------无
- ORM-------无
3.1 基本使用
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
3.2 中间件
app.secret_key = 'some_secret' #加密cookie设置 app.wsgi_app = MiddleWare(app.wsgi_app) #指向新定义的类 class MiddleWare: def __init__(self,wsgi_app): self.wsgi_app = wsgi_app def __call__(self, *args, **kwargs): return self.wsgi_app(*args, **kwargs) #自定义的类,在传给视图函数前执行
3.3 路由系统
1、装饰器 @app.route('/user/<username>') DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': AnyConverter, 'path': PathConverter, 'int': IntegerConverter, 'float': FloatConverter, 'uuid': UUIDConverter, } 2、app.add_url_rule( "/index",view_func=func1,endpoint="reverse_name",method=[] )
蓝图 路由分发 蓝图URL前缀:xxx = Blueprint( 'account', __name__,url_prefix='/xxx' ) 蓝图子域名:xxx = Blueprint( 'account', __name__,subdomain='admin' ) # 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'baidu.com'
3.4 session
设置:session['username'] = 'xxx' 删除:session.pop('username', None)
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
message是一个基于Session实现的用于保存数据的集合,其特点是:使用一次就删除。
3.5 请求相关信息
请求相关信息 request.method request.args request.form request.values request.cookies request.headers request.path request.full_path request.script_root request.url request.base_url request.url_root request.host_url request.host request.files obj = request.files['the_file_name'] obj.save('/var/www/uploads/'+secure_filename(f.filename)) 响应相关信息 return "字符串" return render_template('html模板路径',**{}) return redirect('/index.html') response = make_response(render_template('index.html')) # response是flask.wrappers.Response类型 # response.delete_cookie('key') # response.set_cookie('key', 'value') # response.headers['X-Something'] = 'A value' # return response
3.6 配置文件
app.config.from_pyfile("settings.py")