【问题标题】:How to make faster large data (5,000,000) in Django with Datatables No django-datatables-view No Rest Framework如何使用 Datatables 在 Django 中制作更快的大数据(5,000,000)没有 django-datatables-view 没有 Rest Framework
【发布时间】:2019-10-16 01:44:35
【问题描述】:

我想在 Django 中使用数据表获取大数据(示例 5 000,000)。但处理速度很慢(页面加载时间为 12 秒)。用户登录网页。然后单击以测试 .html。后端进程运行到视图中的 test_json。视图调用使用 to_dict_json 获取数据库数据。在 Models.py 上。 Views 中的这个方法返回 Json 响应对象。 如何使用数据表在 Django 中制作更快的大数据

模型.py

class SysTest(models.Model):

class Meta:
    db_table = 'sysTest'

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Tip = models.ForeignKey(SysRefTip, on_delete=models.CASCADE)
Kod = models.CharField(_("Kod"), max_length=20, blank=False, null=False)
Aciklama1 = models.CharField(_("Açıklama 1"), max_length=100,blank=True, null=True)
Aciklama2 = models.CharField(_("Açıklama 2"), max_length=100,blank=True, null=True)
GrupKod = models.CharField(_("Grup Kodu"), max_length=20,blank=True, null=True)
SayKod = models.FloatField(_("Sayısal Değer"),blank=True, null=True)

def to_dict_json(self):

    return{
        'Id':self.id,
        'Kod':self.Kod,
        'Aciklama1':self.Aciklama1,
        'Aciklama2':self.Aciklama2,
        'GrupKod':self.GrupKod,
        'SayKod':self.SayKod,
    }

查看.py

def test_json(request):
    persons  = SysTest.objects.all()
    data = [person.to_dict_json() for person in persons ]
    response = {'data': data}
   return JsonResponse(response,safe=False,content_type="application/json")

网址.py

from django.urls import path, include
from Referans.Views import testView
from django.conf.urls.i18n import i18n_patterns
app_name ="Test"

urlpatterns = [
    path('', testView.test_listele , name="test"),
    path('test/json/', testView.test_json, name='test_json'),

]

test.html

            <div class="card-body">

                <table id="myTable2" class="table datatable-responsive-control-right">
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Kod</th>
                        <th>Açıklama1</th>
                        <th>Açıklama2</th>
                        <th>SayKod</th>
                        <th>GrupKod</th>
                    </tr>
                    </thead>
                </table>





                </div>

            {% block js%}
            <script>

            $(document).ready( function () {
            var t0 = performance.now();
            degerleriGetir('test/json')
            var t1 = performance.now();

            });

            function degerleriGetir(data){

                table =$('#myTable2').DataTable({
                        Serverside:true,
                        Processing: true,
                        orderClasses: false,
                        bSortClasses:false,
                        bDeferRender: true,
                        scrollCollapse: true,
                        scrollY: 500,
                        stateSave: true,
                        scroller: {
                            loadingIndicator: true
                        },            
                        ajax:{
                        url:('test/json'),
                        processing:true,
                        },
                        destroy:true,
                        columns: [
                        {'data': 'Id'},
                        {'data': 'Kod'},
                        {'data': 'Aciklama1'},
                        {'data': 'Aciklama2'},
                        {'data': 'GrupKod'},
                        {'data': 'SayKod'}  
                        ]
                    });
            };

            </script>

            {% endblock js  %}

【问题讨论】:

  • 你必须使用分页器......你不能同时显示这么大的数据。
  • 嗨,Lu,我不想同时显示大数据。我不知道如何在数据表中使用分页器。
  • 要异步加载吗?
  • Lue,能不能举个django异步加载的例子

标签: django datatables


【解决方案1】:

例如,异步加载是通过 ajax 请求进行的。 javascript 控制用户想要查看的页面,向 django "view_url+?page=X" 发出请求。然后,获取信息(通常在 json 中)并将内容加载到 html 中。我从来没有使用过DataTable,所以我不能确切地告诉你你必须做什么。我要告诉你的是你可以做些什么来实现这种异步加载。其他选项是正常分页,每次为每个页面加载页面(手动实现更容易)。看看 django ListView 模型,让您的实现更轻松、更快捷!

祝你好运!

【讨论】:

  • 你好 Lue,我知道这个信息但是。我不知道如何使用数据表在 Django 中生成有效的更快数据。解决方案包含数据表。因为使用模板包含数据表。我只是想了解一下数据。谢谢你的回答。
  • 您的视图很慢,因为您试图将太多元素加载到 html 中,并在大上下文数据中呈现视图。您必须确保发送的上下文没有那么大。使用分页可以解决这个问题。然后你选择如何让它工作(异步/同步)。
猜你喜欢
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2020-08-21
相关资源
最近更新 更多