Django的FBVApi写法
FBV与CBV最大区别是不创建类,直接创建视图函数,FBV符合小的业务场景中进行使用。
整体FBV目录:
FBV在使用中是在包里文件进行写程序的。操作方法:分别点击models.py、views.py文件右键选择refactor再选择Convert to Python Package,然后分别创建Models.py文件和API.py文件、把原有的代码复制到这两个文件里。需要注意的是:
FBV的视图必须在views包文件夹下的__init__.py下进行引入视图函数名称方可执行程序
from .BookAPI import book_add, book_one, book_all
urls路由
urlpatterns = [ path('bookadd/', views.book_add, name='book_add'), path('bookone/<int:id>/', views.book_one, name='book_one'), path('bookall/', views.book_all, name='book_all'), ]
models数据表
class Book(models.Model): b_name = models.CharField(max_length=32) b_price = models.FloatField(default=1) class Meta: db_table = 'FBV_Book' def to_dict(self): return {'id': self.id, 'b_name': self.b_name, 'b_price': self.b_price}
views视图
@csrf_exempt # 添加数据api接口函数 def book_add(request): if request.method == "GET": book_list = Book.objects.all() book_list_json = [] for book in book_list: book_list_json.append(book.to_dict()) data = { 'status': 200, 'msg': 'ok', 'data': book_list_json } return JsonResponse(data=data) elif request.method == "POST": # 通过post获取参数 b_name = request.POST.get("b_name") b_price = request.POST.get("b_price") # 获取参数后进行保存 book = Book() book.b_name = b_name book.b_price = b_price book.save() data = { # 201代表创建或更新成功 'status': 201, 'msg': 'add success', 'data': book.to_dict() } # status=201:真实请求状态码 return JsonResponse(data=data) @csrf_exempt # 查询一条数据api接口函数 def book_one(request, id): if request.method == "GET": book_obj = Book.objects.get(pk=id) data = { 'status': 200, 'msg': 'ok', 'data': book_obj.to_dict() } return JsonResponse(data=data) # 删除一条数据api接口函数 elif request.method == "DELETE": book_obj = Book.objects.get(pk=id) book_obj.delete() data = { 'status': 204, 'msg': 'delete success', } return JsonResponse(data=data) @csrf_exempt def book_all(request): if request.method == "POST": id = request.POST.getlist('id') idstring = ','.join(id) Book.objects.extra(where=['id IN (' + idstring + ')']).delete() data = { 'status': 204, 'msg': 'delete success', } return JsonResponse(data=data)