urls.py路由设置
路由设置,其实就是指定前端的请求被哪一个后端API所处理。典型的url如下:
from django.contrib import admin
from django.urls import path
from app01 import views # 导入views.py模块
urlpatterns = [
path('admin/', admin.site.urls),
path('publisher_list/', views.publisher_list), # publisher_list/请求被views.py文件中的publisher_list函数处理
path('publisher_add/', views.publisher_add), # publisher_add/请求被views.py文件中的publisher_add函数处理
path('publisher_del/', views.publisher_del), # publisher_del/请求被views.py文件中的publisher_del函数处理
path('publisher_edit/', views.publisher_edit), # publisher_edit/请求被views.py文件中的publisher_edit函数处理
]
views.py中的后端API
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def publisher_list(request):
obj = models.Publisher.objects.all() # 获取所有对象
return render(request, 'publisher_list.html', {'publisher_list': obj}) # {'publisher_list': obj}是模板,可以传递给前端页面。
def publisher_add(request):
if request.method == "POST": # 如果是POST请求
pub_name = request.POST.get('pub_name') # 获取出版社的名称
if not pub_name:
return render(request, 'publisher_add.html', {'error': "出版社名字不能为空"})
if models.Publisher.objects.filter(name=pub_name):
return render(request, 'publisher_add.html', {'error': "出版社已经存在"})
models.Publisher.objects.create(name=pub_name) # 增加出版社,使用create方法
return redirect('/publisher_list/') # 增加完成以后,跳转到获取所有出版社页面
return render(request, 'publisher_add.html') # 默认返回增加页面。
def publisher_del(request):
pk = request.GET.get('id') # 获取URL中id字段的值
models.Publisher.objects.filter(id=pk).delete() # 删除数据库中的数据
return redirect('/publisher_list/') # 重定向页面。
def publisher_edit(request):
id = request.GET.get('id')
obj1 = models.Publisher.objects.get(id=id)
if request.method == "GET":
return render(request, 'publisher_edit.html', {'pub_obj': obj1})
else:
name = request.POST.get('pub_name')
obj2 = models.Publisher.objects.filter(name=name)
if obj2:
return render(request, 'publisher_edit.html', {'msg': "该出版社已存在"})
else:
obj1.name = name # 在内存中修改
obj1.save() # 将修改保存到数据库
return redirect('/publisher_list') # 重定向到list页面