Django 序列化 前端通过ajax来获取数据库中的数据

前端通过ajax来获取数据库中的数据

1、实现方式一(不用,只参考)

在后台通过获取数据并自己格式化成html数据全部发给前端

# views.py

def get_data(request):
    user_list = models.UserInfo.objects.all()
    return render(request, 'get_data.html', {'user_list':user_list})
# 获取数据的前端页面 index.html
<h1>用户列表</h1>
<table id='tb'></table>

<script src='/statics/jquery.js'></script>

<script>
  $(function{
    initData()
  });
  function initData(){
    $.ajax({
      url: '/get_data.html'
      type: 'GET',
      success: function(arg){
          $('#tb').append(arg);
        }
    })

  }
<script>
# get_data.html

{% for row in user_list %}
        <tr>
           <td>{{ row.id }}</td>
       <td>{{ row.username }}</td>
     </tr>
{% endfor %}

 2、实现方法二

在后台通过只获取数据发给前端,由前端生成相应的html来存放数据

# views.py
from django.core imports serializers  可将对象序列化为符串
def get_data(request):
  ret = {'status':True, 'data':None}
  try:   # 1
    user_list
= models.UserInfo.objects.all()  # 这时是个QuerySet,里边是一个一个对象,无法json.dumps()
    ret['data'] = serializers.serialize('json',user_list)  # 将QuerySet对象序列化为json格式的字符串

    # 2
    # user_list = models.UserInfo.objects.all().values('id','username') #
这时是个QuerySet,里边是一个一个字典
    # ret['data']= list(userlist)  # 用list将最外层的QuerySet转为列表,就可json.dumps()

    # 3
# user_list = models.UserInfo.objects.all().values_list('id','username') #这时是个QuerySet,里边是一个一个元组
  # ret['data']= list(userlist)  # 用list将最外层的QuerySet转为列表,就可json.dumps()
    except Exception as e:
    ret['data'] = False
return HttpResponse(json.dumps(ret))
# 获取数据的前端页面 index.html
<h1>用户列表</h1>
<table id='tb'></table>

<script src='/statics/jquery.js'></script>

<script>
  $(function{
    initData()
  });
  function initData(){
    $.ajax({
      url: '/get_data.html'
      type: 'GET',
      dataType:'JSON'       success: function(arg){           if(arg.status){
            // 此时arg.data是个字符串
            v = JSON.parse(arg.data) //再将json字符串转为json对象
            //通过for循环取里里面的数据生成html...
            }
        }     })   } <script>
原文地址:https://www.cnblogs.com/dangrui0725/p/9672043.html