Django的View
一個(gè)視圖函數(shù)(類),簡(jiǎn)稱視圖,是一個(gè)簡(jiǎn)單的Python 函數(shù)(類),它接受Web請(qǐng)求并且返回Web響應(yīng)。響應(yīng)可以是一張網(wǎng)頁(yè)的HTML內(nèi)容,一個(gè)重定向,一個(gè)404錯(cuò)誤,一個(gè)XML文檔,或者一張圖片。
無論視圖本身包含什么邏輯,都要返回響應(yīng)。代碼寫在哪里也無所謂,只要它在你當(dāng)前項(xiàng)目目錄下面。除此之外沒有更多的要求了——可以說“沒有什么神奇的地方”。為了將代碼放在某處,大家約定成俗將視圖放置在項(xiàng)目(project)或應(yīng)用程序(app)目錄中的名為views.py的文件中。
導(dǎo)入:from django.views import View
一、查詢所有數(shù)據(jù)
查詢數(shù)據(jù)在自定義的視圖類中定義get方法
使用django.http模塊中的JsonResponse對(duì)非json格式的數(shù)據(jù)做返回處理
在JsonResponse必須添加safe=False參數(shù),否則會(huì)報(bào)錯(cuò):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):
# 模型類實(shí)例化對(duì)象
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ù)轉(zhuǎn)成字典
使用django.db.models模塊中的Q來查詢多個(gè)字段在數(shù)據(jù)庫(kù)中是否存在
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轉(zhuǎn)字典
dict_data = json.loads(request.body.decode())
print(dict_data)
nick_name = dict_data.get('nickName')
code = dict_data.get('code')
open_id = "xljsafwjeilnvaiwogjirgnlg"
# 校驗(yàn)數(shù)據(jù)
result = UserProfile.objects.filter(Q(code=code) | Q(open_id=open_id))
if not result.exists():
# 數(shù)據(jù)入庫(kù)
user = UserProfile.objects.create( username=nick_name, open_id=open_id, code=code )
# 返回響應(yīng)
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ù)(單個(gè))
前端需要傳遞pk/id值,通過pk/id查詢數(shù)據(jù),查詢一條數(shù)據(jù)必須用get,不能用filter,否則會(huì)報(bào)錯(cuò):AttributeError: 'QuerySet' object has no attribute 'id'
數(shù)據(jù)轉(zhuǎn)換
返回響應(yīng)
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,否則會(huì)報(bào)錯(cuò):AttributeError: 'QuerySet' object has no attribute 'id'
更新一條數(shù)據(jù)時(shí)必須使用filter來查詢數(shù)據(jù)集,再使用update(**data)來更新數(shù)據(jù),不能使用get,否則會(huì)報(bào)錯(cuò):AttributeError: '模型類' object has no attribute 'update'
get查詢獲取到的是數(shù)據(jù)對(duì)象,而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ù)表中字段很少的情況,如果字段較多,寫起來會(huì)很麻煩,不利于開發(fā)
總結(jié)
到此這篇關(guān)于Django學(xué)習(xí)筆記之View操作指南的文章就介紹到這了,更多相關(guān)Django View操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Golang 并發(fā)以及通道的使用方式
- golang 如何替換掉字符串里面的換行符\n
- spring boot集成mongodb的增刪改查的示例代碼
- go并發(fā)實(shí)現(xiàn)素?cái)?shù)篩的代碼
- golang 中的 nil的場(chǎng)景分析
- 完美解決go Fscanf 在讀取文件時(shí)出現(xiàn)的問題