django前后端數據交互


1.  用getJSON動態加載數據:

$getJSON("{%url  '{watch_information}'%}",{'data':data,},function(ret){
       //do something
})

 第一個參數為處理請求的鏈接,第二個參數為連同請求發送到后端的數據,第三個參數是返回后調用的函數,在函數體內可以對返回數據 ret 進行各種操作。

 后端視圖函數:

from django.http import JsonResponse
def watch_information(request):
       data=request.GET.get('data')
       #dosomething
       return JsonResponse(data)

 如果直接返回QuerySet,則需要將其序列化:

     data = serializer.serialize("json", somemodel.objects.all())
     return JsonResponse(data)

 然后再在前端反序列化:

$getJSON("{%url  '{watch_information}'%}",{'data':data,},function(ret){
       $each(JSON.parse(ret),function(i,item){
               //JSON.parse將json字符串轉化成JavaScript對象
               // i是索引,item是列表中的每個元素
              //dosomething
      })
})

2. 用表單提交數據到后台。以登錄表單為例:

<form class="form-signin my-md-4" action="/home/" method="POST">
         {% csrf_token %}
         <h2 class="h2 mb-4 font-weight-normal">Please sign in</h2>
         {% if message %}
         <div class="alert alert-warning">{{ message }}</div>
         {% endif %}
         <div class="form-group">
             <label for="inputUsername" class="sr-only">User name</label>
             <input name='username' type="text" id="inputUsername" class="form-control" placeholder="User name" required autofocus>
         </div>
         <br/>
         <div class="form-group">
             <label for="inputPassword" class="sr-only">Password</label>
             <input name='password' type="password" id="inputPassword" class="form-control" placeholder="Password" required>
         </div>
             <button class="btn btn-lg btn-secondary btn-block" type="submit">Log in </button>
</form>

django提供了一種機制防止跨站點請求偽造(CSRF),當訪問頁面時,會隨機生成一個token,存放在cookie中,並保存到session;當提交表單時會附帶一個token,

后端比對這個token與session中是否一致。因此在每個表單開始處都要加上{%csrf_token%} 自動生成token。。如果要強行取消csrf機制,則在視圖函數前加上 @csrf_exempt.

后端代碼:

def home(request):
    if request.session.get('is_login',None):    #判斷用戶是否已登錄
        return redirect('../recent')
    if request.method=='POST':
        username=request.POST.get('username')   #按“name”屬性獲取表單數據
        password=request.POST.get('password')
        try: 
            user=models.User.objects.get(username=username)
            if user.password==password:           #保存用戶信息
                request.session['is_login'] = True
                request.session['user_id'] = user.id
                request.session['user_name'] = user.username
                return redirect('../recent')
            else:
                message='密碼錯誤'
                return render(request,'hello/home.html',{"message":message})
        except:
            message='用戶不存在 注冊新用戶?'
            return render(request,'hello/home.html',{"message":message})
    return render(request,"hello/home.html")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM