您现在的位置是:主页 > news > 广州手机端网站制作/百度关键词搜索排名统计
广州手机端网站制作/百度关键词搜索排名统计
admin2025/6/23 22:36:15【news】
简介广州手机端网站制作,百度关键词搜索排名统计,怎么创建网站挣钱,敦化网站建设一、给Http请求传参数 第一种形式: 以Rest的形式传参 对于单个参数,类似于Springboot的RestFul请求,可以直接在/后面添加参数,然后在Urlpatterns里面使用<>来接受该参数。 例如: 参数为zhuzhu post /polls/insert/record/zhuzhu 在…
一、给Http请求传参数
第一种形式: 以Rest的形式传参
对于单个参数,类似于Springboot的RestFul请求,可以直接在/后面添加参数,然后在Urlpatterns里面使用<>来接受该参数。
例如: 参数为zhuzhu
post /polls/insert/record/zhuzhu
在根url文件里,会映射到Path里去,然后使用<name>接受,这个名字相当于一个形参,到后面取的时候直接把该参数加上去即可。
from django.urls import pathfrom . import views
from polls.user import InsertUserurlpatterns = [#name属性可以随意取path(r'index', views.index, name='index'),path(r'insert/record/<name>',InsertUser.as_view())
]
使用name就可以接收到参数了:
from django.http import HttpResponse
from requests import Response
from rest_framework.views import APIViewfrom polls.models import Userclass InsertUser(APIView):def get_or_create(self, request,name):print("插入一名员工!")# 1.怎么获取数据库对象b=User(username=name,password="123456")b.save()## do somethingprint("插入完毕!")return HttpResponse("Some data")def get(self, request,name):return self.get_or_create(request,name)def post(self, request,name):return self.get_or_create(request,name)
指定参数类型
可以在传参时,指定参数类型,如果指定Int,那么就不能传字符串类型,否则会找不到指定的url。
path(r'select/all/record/<int:uid>',SelectUser.as_view()),
常用的参数类型有:
str
- 匹配除了'/'
之外的非空字符串。如果表达式内不包含转换器,则会默认匹配字符串。int
- 匹配 0 或任何正整数。返回一个int
。slug
- 匹配任意由 ASCII 字母或数字以及连字符和下划线组成的短标签。比如,building-your-1st-django-site
。uuid
- 匹配一个格式化的 UUID 。为了防止多个 URL 映射到同一个页面,必须包含破折号并且字符都为小写。比如,075194d3-6885-417e-a8a8-6c931e272f00
。返回一个UUID实例。path
- 匹配非空字段,包括路径分隔符'/'
。它允许你匹配完整的 URL 路径而不是像str
那样匹配 URL 的一部分。
第二种形式: 拼接url形式传参
? username= zhangsan
通过request.GET.get()方法来获取到get请求上url里? 拼接的参数:
username = request.GET.get("username")
二、执行查询
一旦创建模型后,Django会自动创建一套对数据库操作的API,包括创建、检索、更新、删除对象。
1. 创建对象
sys_user表里包含了两个字段,user_name,pass_word
b=User(username="大饼",password="123")
b.save();
b.username="Xiao bing"
b.save()
第一个 b.save()相当于Mysql里的 insert into sys_user (username,password) values('大饼','123')
第二个 b.save()相当于MySql里的update语句。
2.QuerySet解读
Django的一个querySet表示的数据库中对象的一个集合, querySet对应的mysql的select语句,而.filter, .exclude想等于mysql的where字句对查询的记录进行筛选。
class SelectUser(APIView):def get(self,request):print("查询员工信息!")user=User.objects.all().values_list("username","password")print(user)#使用filter,类似于Mysql的where子句user1=User.objects.all().filter(username="猪猪").values_list("password")print(user1)#.exclude 排除user2=User.objects.all().exclude(username="猪猪").values_list("username","password")print(user2)print("查询完毕!")return HttpResponse(user)
打印结果为:
查询员工信息!
<QuerySet [ ('猪猪', '123456'), ('猪猪', '123456'), ('zhuzhu', '123456'), ('bingbing', '123456')]>
<QuerySet [('123456',), ('123456',)]>
<QuerySet [ ('zhuzhu', '123456'), ('bingbing', '123456')]>
查询完毕!
注:
1) 每次筛选出来的QuerySet是唯一的,每次.filter, .exclude出来的querySet是唯一的,而且每个QuerySet相互独立。
2) QuerySet是惰性的,只有QuerySet被计算时才执行查询操作。
>>> q = Entry.objects.filter(headline__startswith="What")
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")
>>> print(q)
上述代码,只进行了一次数据库的交互,只有print(q)时,才进行了数据库活动。
3 . 通过外键来查询
# 课程详情
class CourseDetail(TimestampModel):resource_id = models.IntegerField(verbose_name="课程Id")# 适合对象suit = models.ManyToManyField(SuitableObject, verbose_name="适合对象")# 学习目标goal = models.ManyToManyField(StudyGoal, verbose_name="学习目标")# 课程安排(课时)hour = models.IntegerField(verbose_name="课时")# 师资介绍teacher = models.ManyToManyField(Teacher, verbose_name="老师")# 使用教材material = models.ManyToManyField(TeacherMaterial, verbose_name="教材")class Meta:verbose_name = "课程详情表"verbose_name_plural = "课程详情表"db_table = "sys_course_detail"
通过model对象来获取到所有的teacher,另外可以通过使用using属性来指定操作的数据库:
res = CourseDetail.objects.using("admin").filter(resource_id=course_id).first()
teacher = res.teacher.using("admin").all()
4. 通过外键来save()关联表
有的时候,保存一条记录前,往往依赖于外键的记录,有了外键,才能够保存该记录,比如有了班级才能有学生,因此才生成记录时,应该先在班级表里先插入一条记录,然后通过sys_class.student.add(stu),添加一下学生,再使用.save()方法即可在中间表生成一条记录。
stu = Student.objects.get(id=user_id)
sys_class = SysClass()
sys_class.name = resource_package[0]["name"]
sys_class.save()
sys_class.student.add(stu)
sys_class.save()
三、 执行返回
在输出的时候,一般通过json的形式来定义输出的结果,类如,执行某个操作成功后,给前端返回一个状态代码和状态描述:
{"code": 0,"message": "OK"
}
在方法执行前,可以先将封装好的结果对象给创建出来:
r = Result()
在执行查询后,需要将获取到的querySet里的对象给获取出来,将对象序列化后,再赋值给r.data,然后返回出来:
datas = []for i in res:data = MyClassInfoSerializer(i).datadatas.append(data)r.data = datas
如果需要分页展示,那么需要在__init__的时候,加一下data_count字段,将querySet的个数给赋值给data_count:
class Result:code = 0message = 'OK'def __init__(self, code=0, message='OK', data=None, data_count=None):self.code = codeself.message = messageself.clock = time.time()if data is not None:self.data = dataif data_count is not None:self.data_count = data_count
最后使用json_response将对象结果返回给前端, r即为result:
return JsonResponse(result.__dict__,json_dumps_params={'sort_keys': False, 'indent': 4, 'ensure_ascii': False}, safe=False)