博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django和tornado的一些区别
阅读量:4608 次
发布时间:2019-06-09

本文共 4726 字,大约阅读时间需要 15 分钟。

tornado和django的区别

  • 从模板上来说

    • 前端模板上的使用的语法有些区别

    • tornado可以通过render传类及函数

      class Calculation:    def sum(self,a,b):        return a+bclass UiHandler(tornado.web.RequestHandler):    def func(self):        return 'arrow'    def get(self):        name = self.get_argument('name', 'no')        self.render(            'index.html',            name = name,            func=self.func,            cal=Calculation,        )
    • tornado可以通过ui_methods,ui_modules传函数和类

      handlers = [ui_methods=util.uimethod,            ui_modules=util.uimodules,            ]
      • ui_methods中的函数要传self参数 

        def methods1(self):    return 'ui_methods1'
      • ui_modules要继承UIModule类

         
        from tornado.web import UIModuleclass Advertisdement(UIModule):    def render(self, *args, **kwargs):        return self.render_string('07ad.html')  #render传html文件     def css_files(self):        return "/static/css/King_Chance_Layer7.css"  #css_files传css文件    def javascript_files(self):   #javascript_files传js文件           return [            "/static/js/jquery_1_7.js",            "/static/js/King_Chance_Layer.js",            "/static/js/King_layer_test.js",        ]
    • django可以通过上下文渲染器来传

      • 创建上下文渲染器文件context_processors.py

         
        from .models import GoodsCategory​def category_list(request):    category_list = GoodsCategory.objects.filter(status=0).all()    return {
        "category_list": category_list}
      • 添加到settings的TEMPLATES中

         
        TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [os.path.join(BASE_DIR, 'templates')],        'APP_DIRS': True,        'OPTIONS': {            'context_processors': [                'django.template.context_processors.debug',                'django.template.context_processors.request',                'django.contrib.auth.context_processors.auth',                'django.contrib.messages.context_processors.messages',                'django.template.context_processors.static',                'shop.context_processors.category_list',            ],          },    },]
      • 在前端页面使用

        新品推荐

        {
        % refferral_goods cid %}
    • django可以通过自定义标签来传

      • 在app下创建templatetags包在该目录下创建tags.py

         
        @register.simple_tagdef divide_page(curr_page, page_obj, url_name, request_url, page_name="", args=(), kwargs={}):    """        算法            1、先获取所有页码列表            range_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]​            2、 然后定义需要展示的数目,这里定义为一个5            max_page_count = 5​            3、获取中间位置前后需要加减索引            center_index = max_page_count / 2​            4、获取当前页面索引,这里定义为当前页面为5            curr_index = range_list.index(5)            range_list[curr_index-center_index:]            [3, 4, 5, 6, 7, 8, 9]​            5、循环处理右边            获取一个计数器            当计数器的索引大于总数目时退出            [3, 4, 5, 6, 7, 8, 9] 迭代这个时            当迭代到7的位置,计数器的值就为6,退出循环,就获取到以下列表            [3, 4, 5, 6, 7]​    """    def parse_qs(qs):        res = {}        params = qs.split("&")        for p_str in params:            k, v = p_str.split("=")            res[k] = urllib.unquote(v)        return res​    url = reverse(url_name, args=args, kwargs=kwargs)       # 点击页码需要跳转的url前缀    # 默认为unicode,这里修改为utf8    url = url.encode("utf8")    page_str = '
        ' max_page_count = 5 page = page_obj.page(curr_page)​ # 获取当前get参数 params = parse_qs(urlparse.urlparse(request_url).query.encode("utf8"))​ if not page_name: page_name = "curr_page"​ # 生成上一页html if page.has_previous(): params[page_name] = curr_page - 1​ curr_url = "%s?%s" % (url, urllib.urlencode(params)) page_str += '
        max_page_count: break​ # 生成下一页html if page.has_next(): params[page_name] = curr_page + 1 curr_url = "%s?%s" % (url, urllib.urlencode(params)) page_str += '
        "​ return mark_safe(page_str)
      • 在前端模板中调用

      •  

        {% extends 'shop_base.html' %}{
        % load tags %}​{
        % block shop_js %} {
        % endblock shop_js %}​{
        % block index_content %} {
        { block.super }}​
        {
        % divide_page curr_page p 'shop:categorys' request.get_full_path kwargs=params %}
  • 从数据库来说

    django有自己的ORM,而tornado的torndb不是很强大,所以一般都使用sqlalchemy

  • 从视图上来说

    • django可以用form做一些验证

    • render中django没有tornado可以传的参数类型多

  • 性能上来说

    tornado由于是单线程异步回调的模式,所以比django的并发要高

    django是多线程但是没有做异步,所以要比tornado的并发低

  • 从提供的插件上来说

    django提供了ORM,django.core.mail,django crontab,等等

转载于:https://www.cnblogs.com/arrow-kejin/p/8961450.html

你可能感兴趣的文章
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
MySQL数据库免安装版配置
查看>>