您现在的位置是:主页 > news > 广州手机端网站制作/百度关键词搜索排名统计

广州手机端网站制作/百度关键词搜索排名统计

admin2025/6/23 22:36:15news

简介广州手机端网站制作,百度关键词搜索排名统计,怎么创建网站挣钱,敦化网站建设一、给Http请求传参数 第一种形式: 以Rest的形式传参 对于单个参数&#xff0c;类似于Springboot的RestFul请求&#xff0c;可以直接在/后面添加参数&#xff0c;然后在Urlpatterns里面使用<>来接受该参数。 例如: 参数为zhuzhu post /polls/insert/record/zhuzhu 在…

广州手机端网站制作,百度关键词搜索排名统计,怎么创建网站挣钱,敦化网站建设一、给Http请求传参数 第一种形式: 以Rest的形式传参 对于单个参数&#xff0c;类似于Springboot的RestFul请求&#xff0c;可以直接在/后面添加参数&#xff0c;然后在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)