溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Django中對View進行操作

發(fā)布時間:2021-03-20 15:02:07 來源:億速云 閱讀:217 作者:Leah 欄目:開發(fā)技術

本篇文章給大家分享的是有關怎么在Django中對View進行操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Django的View

一個視圖函數(shù)(類),簡稱視圖,是一個簡單的Python 函數(shù)(類),它接受Web請求并且返回Web響應。響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片。 

無論視圖本身包含什么邏輯,都要返回響應。代碼寫在哪里也無所謂,只要它在你當前項目目錄下面。除此之外沒有更多的要求了——可以說“沒有什么神奇的地方”。為了將代碼放在某處,大家約定成俗將視圖放置在項目(project)或應用程序(app)目錄中的名為views.py的文件中。

導入:from django.views import View

一、查詢所有數(shù)據(jù)

查詢數(shù)據(jù)在自定義的視圖類中定義get方法

使用django.http模塊中的JsonResponse對非json格式的數(shù)據(jù)做返回處理

在JsonResponse必須添加safe=False參數(shù),否則會報錯:In order to allow non-dict objects to be serialized set the safe

from django.http import HttpResponse 
from django import http 
# Create your views here. 
class UserView(View): 
 ''' 用戶視圖 ''' 
 def get(self, request): 
  # 模型類實例化對象 
  users = UserProfile.objects.all() 
  user_list = [] 
  for user in users: 
   user_dict = { 
    'id': user.id, 
    'username': user.username, 
    'password': user.password, 
    'open_id': user.open_id, 
    'code': user.code 
   } 
  user_list.append(user_dict)
  return http.JsonResponse(user_list)

二、創(chuàng)建數(shù)據(jù)

使用django中的json,把前端傳遞過來的json數(shù)據(jù)轉成字典

使用django.db.models模塊中的Q來查詢多個字段在數(shù)據(jù)庫中是否存在

from django.views import View 
from django.http import HttpResponse 
from django import http 
from django.db.models import Q 
import json 
class UserView(View): 
 ''' 用戶視圖 ''' 
 def post(self, request): 
  # 獲取數(shù)據(jù), json轉字典 
  dict_data = json.loads(request.body.decode()) 
  print(dict_data) 
  nick_name = dict_data.get('nickName') 
  code = dict_data.get('code') 
  open_id = "xljsafwjeilnvaiwogjirgnlg" 
  # 校驗數(shù)據(jù) 
  result = UserProfile.objects.filter(Q(code=code) | Q(open_id=open_id)) 
  if not result.exists(): 
   # 數(shù)據(jù)入庫 
   user = UserProfile.objects.create( username=nick_name, open_id=open_id, code=code ) 
   # 返回響應 
   user_dict = { 
    'id': user.id, 
    'username': user.username, 
    'password': user.password, 
    'open_id': user.open_id, 
    'code': user.code 
   } 
   return http.JsonResponse(user_dict) 
  return http.JsonResponse("用戶已存在", safe=False, status=202)

三、查詢某一條數(shù)據(jù)(單個)

前端需要傳遞pk/id值,通過pk/id查詢數(shù)據(jù),查詢一條數(shù)據(jù)必須用get,不能用filter,否則會報錯:AttributeError: 'QuerySet' object has no attribute 'id'

數(shù)據(jù)轉換

返回響應

class UserProfileDetail(View): 
 ''' 詳情視圖 ''' 
 def get(self, request): 
  userInfo = UserProfile.objects.get(id=id) 
  if not userInfo: 
   return HttpResponse("查詢的用Info戶不存在", status=404)     
  user_dict = { 
   'id': userInfo.id, 
   'username': userInfo.username, 
   'password': userInfo.password, 
   'open_id': userInfo.open_id, 
   'code': userInfo.code 
  } 
  return http.JsonResponse(user_dict, status=200)

四、更新一條數(shù)據(jù)

前端需要傳遞pk/id值,通過pk/id查詢數(shù)據(jù),查詢一條數(shù)據(jù)必須用get,不能用filter,否則會報錯:AttributeError: 'QuerySet' object has no attribute 'id'

更新一條數(shù)據(jù)時必須使用filter來查詢數(shù)據(jù)集,再使用update(**data)來更新數(shù)據(jù),不能使用get,否則會報錯:AttributeError: '模型類' object has no attribute 'update'

get查詢獲取到的是數(shù)據(jù)對象,而filter查詢獲取到的是數(shù)據(jù)集

class UserProfileDetail(View): 
 ''' 詳情視圖 ''' 
 def put(self, request, id): 
  data_dict = json.loads(request.body.decode()) 
  userInfo = UserProfile.objects.get(id=id) 
  if not userInfo: 
   return HttpResponse("查詢的用Info戶不存在", status=404)     
  UserProfile.objects.filter(id=id).update(**data_dict) 
  userInfo = UserProfile.objects.get(id=id) 
  user_dict = { 
   'id': userInfo.id, 
   'username': userInfo.username, 
   'password': userInfo.password, 
   'open_id': userInfo.open_id, 
   'code': userInfo.code 
  } 
  return http.JsonResponse(user_dict, status=200)

五、刪除某一條數(shù)據(jù)

class UserProfileDetail(View): 
 ''' 詳情視圖 ''' 
 def delete(self, request, id): 
  userInfo = UserProfile.objects.filter(id=id) 
  if not userInfo: 
   return HttpResponse("刪除的數(shù)據(jù)不存在", status=404)      
  UserProfile.objects.filter(id=id).delete() 
  return HttpResponse("數(shù)據(jù)刪除成功", status=204)

以上就是怎么在Django中對View進行操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI