1.restful请求方式
一个视图对应多个操作(增删改查)





老的方式


views.py
from django.shortcuts import render
from django.http import HttpResponse,request,QueryDict, JsonResponse
from myapp.models import User
from django.views.generic import View
# Create your views here.
def user(request):
if request.method == "GET":
return HttpResponse("获取用户")
elif request.method == "POST":
name = request.POST.get('name')
city = request.POST.get('city')
sex = request.POST.get('sex')
age = request.POST.get('age')
User.objects.create(
name=name,
city=city,
sex=sex,
age=age
)
return HttpResponse("创建用户成功!")
elif request.method == "PUT":
data = QueryDict(request.body)
id = data.get('id')
user_obj = User.objects.get(id=id)
user_obj.city = data.get('city')
user_obj.sex = data.get('sex')
user_obj.age = data.get('age')
user_obj.save()
# 方式2
# data = {'city': data.get('city'), 'sex': data.get('sex'), 'age': data.get('age')}
# User.objects.filter(id=id).update(**data)
res = {'code': 200, 'msg': '更新成功!'}
return JsonResponse(res)
elif request.method == "DELETE":
# request有GET和POST,没有DELETE和PUT
data = QueryDict(request.body)
id = data.get('id')
try:
User.objects.get(id=id).delete()
res = {'code': 200, 'msg': '删除用户成功!'}
except Exception:
res = {'code': 500, 'msg': '删除用户失败!'}
return JsonResponse(res)#返回的是json对象,httpresponse返回的是字符串
def user_edit(request):
id = request.GET.get('id')
user_obj = User.objects.get(id=id)
return render(request, 'user_edit.html', {'id': id, 'user': user_obj})
def user_add(request):
return render(request, 'user_add.html')
def user_list(request):
user_list = User.objects.all()
return render(request,'user_list.html',{'user_list': user_list})
# 上面是老式的api请求方式,
user_list.html
列出所有用户
姓名
城市
性别
年龄
操作
{% for i in user_list %}
{{ i.name }}
{{ i.city }}
{{ i.sex }}
{{ i.age }}
{% endfor %}
user_edit.html
编辑用户
编辑用户
user_add.html
创建用户
创建用户
myapp/urls.py
from django.contrib import admin
from django.urls import path,include
from myapp import views
urlpatterns = [
path('user/',views.user),
path('user_list/',views.user_list),
path('user_add/',views.user_add),
path('user_edit/', views.user_edit)
]

上述是函数视图,if多分支的方式。
用django的类进行替换,类视图:
class UserView(View):
def get(self, request):
if request.GET.get('id'):
pass
# user_obj = User.objects.get(id=request.GET.get('id'))
# res = {'code': 200, 'msg': '成功!', user_obj: user_obj}
# return JsonResponse(res)
else:
user_list = User.objects.all()
return render(request, 'user_list.html', {'user_list': user_list})
def post(self, request):
name = request.POST.get('name')
city = request.POST.get('city')
sex = request.POST.get('sex')
age = request.POST.get('age')
User.objects.create(
name=name,
city=city,
sex=sex,
age=age
)
return HttpResponse("创建用户成功!")
def put(self, request):
data = QueryDict(request.body)
id = data.get('id')
user_obj = User.objects.get(id=id)
user_obj.city = data.get('city')
user_obj.sex = data.get('sex')
user_obj.age = data.get('age')
user_obj.save()
# 方式2
# data = {'city': data.get('city'), 'sex': data.get('sex'), 'age': data.get('age')}
# User.objects.filter(id=id).update(**data)
res = {'code': 200, 'msg': '更新成功!'}
return JsonResponse(res)
def delete(self, request):
data = QueryDict(request.body)
id = data.get('id')
try:
User.objects.get(id=id).delete()
res = {'code': 200, 'msg': '删除用户成功!'}
except Exception:
res = {'code': 500, 'msg': '删除用户失败!'}
return JsonResponse(res)
urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
# path('user/', views.user),
path('user/', views.UserView.as_view()), #类视图用的url地址
path('user_add', views.user_add),
path('user_edit', views.user_edit)
]