博客篇我们使用的是前后端不分离的方式进行实现,前后端不分离实现方式,主要用于小型的项目,且一个人就可以搞定所有,但是中大型的应用还是用的前后端分离的方式进行的
前后端分离方式后台主要给前端提供接口,前端JS调用后台的接口,根据接口定义的传参进行传参,得到返回值,然后展现在页面上,或者对数据进行了操作,把操作后的数据传给后端,后端进行数据的更新等
下面的例子我们主要从基本的增删改查进行设计后台接口部分
一、准备工作
1、modles.py文件中,创建student表,用于进行增删改查
class Student(models.Model): name = models.CharField(verbose_name=‘名称‘,max_length=10) phone = models.CharField(max_length=11,unique=True,verbose_name=‘手机号‘) money = models.FloatField(verbose_name=‘金额‘,default=0,null=True) addr = models.CharField(verbose_name=‘地址‘, default=‘北京‘, max_length=20) work_addr = models.CharField(verbose_name=‘地址‘, default=‘北京‘, max_length=20) create_time = models.DateTimeField(verbose_name=‘创建时间‘, auto_now_add=True) # auto_now_add的意思,插入数据的时候,自动取当前时间 update_time = models.DateTimeField(verbose_name=‘修改时间‘, auto_now=True) class Meta: verbose_name = ‘学生表‘ verbose_name_plural = verbose_name db_table = ‘student‘ def __str__(self): return self.name
python manage.py makemigrations 创建表结构 python manage.py migrate 创建数据库表
2、view.py文件中引用form表单进行验证
from .models import Student from django.forms import ModelForm #引用表单模块 class StudentForm(ModelForm): class Meta: model = Student fields = ‘__all__‘ #代表所有的字段
3、定义接口类,主要用于写增删改查接口对应的方法
class StudentView(View):
4、urls.py文件,增加接口请求名称
urlpatterns = [ #这种方式,需要在连接后面加?,比如url?id=1 path(‘stu3‘, views2.StudentView.as_view() ), #这种方式,无需在连接后面加?,比如 url/3 #path(‘stu3/<int:id>‘,views2.StudentView.as_view()), ]
二、查询方法
其中支持模糊查询及过滤查询,方法如下:
search_field=[‘name‘,‘phone‘,‘addr‘,‘work_addr‘] #存储搜索的字段,全局变量 filter_field=[‘name‘,‘phone‘,‘id‘] #存储过滤字段,全局变量 def get(self,request): limit = request.GET.get(‘limit‘,20) #每页个数,无传值默认每页20 page = request.GET.get(‘page‘,1) #页码,无传值,默认1 search=request.GET.get(‘search‘) #获取请求中的查询条件 filter_dict={} #定义空字典,存储过滤字段及值 #过滤 for field in self.filter_field: #遍历过滤list value=request.GET.get(field) if value: #当请求中有该字段且该字段不为空 filter_dict[field]=value #把该字段及值写入过滤字典中 #查询 q_result=Q() for field in self.search_field: #变量搜索list if search: d={‘%s__contains‘%field:search} q_result=Q(**d)|q_result all_students = Student.objects.filter(**filter_dict).filter(q_result).values() #优先过滤 #all_students = Student.objects.filter(q_result).values().filter(**filter_dict) #优先模糊查询 page_obj = Paginator(all_students,limit) stus = list(page_obj.get_page(page)) data = {"error_code":0,"msg":"操作成功","data":stus,"count":page_obj.count} return JsonResponse(data,json_dumps_params={"ensure_ascii":False},encoder=NbJSONEncoder)
原文地址:https://www.cnblogs.com/xiaokuangnvhai/p/11757527.html
时间: 2024-11-04 19:48:30