django、tornado、flask对比

本文对比了Django、Tornado和Flask这三个流行的Python Web框架的主要组件及特性,包括各自的socket处理方式、中间件支持情况、路由系统、视图函数、模板引擎、安全性措施等,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、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")

 

转载于:https://www.cnblogs.com/igzh/p/9015165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值