Django學習筆記之View操作指南
Django的View
一個視圖函數(shù)(類),簡稱視圖,是一個簡單的Python 函數(shù)(類),它接受Web請求并且返回Web響應。響應可以是一張網(wǎng)頁的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)
上述的操作只能適用于數(shù)據(jù)表中字段很少的情況,如果字段較多,寫起來會很麻煩,不利于開發(fā)
總結
到此這篇關于Django學習筆記之View操作指南的文章就介紹到這了,更多相關Django View操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python爬蟲入門教程--利用requests構建知乎API(三)
這篇文章主要給大家介紹了關于python爬蟲入門之利用requests構建知乎API的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05每天遷移MySQL歷史數(shù)據(jù)到歷史庫Python腳本
這篇文章主要為大家詳細介紹了Python實現(xiàn)每天遷移MySQL歷史數(shù)據(jù)到歷史庫的腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04