当前位置: 首页 > 网络应用技术

如何导入djangoreverse?

时间:2023-03-08 00:16:18 网络应用技术

  简介:许多朋友问有关djangoreverse如何进口的问题。本文的首席CTO笔记将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!

  示例:通过学生的课程数,获取此类信息

  A。使用HTML页面的链接地址中的参数添加参数,您需要在地址中设置参数名称和参数值

  B.URL中的地址不需要设置参数

  C。此参数不需要在函数中传递,也不需要通过使用函数中的get.get('parameter name')获得。

  A。直接在链接路径末尾添加参数

  b。将参数匹配添加到URL中的地址,此处暂时忽略下面的名称参数

  C。该参数需要在功能中传递,并且不再需要通过get.get()获得该参数,可以直接使用它

  单击页面上的登录名,跳到登录页面,然后在URL中写入该方法如下:

  主要目录URL文件是使用应用程序的URL配置的

  App目录URL文件配置登录路径

  A。正则表达式

  B.Namespace:名称

  A。

  注意:反向地址必须以名称空间的形式使用:名称

  B.URL中的地址必须指定参数名称

  A。无需参数

  B.URL地址不需要通过参数传递

  如图所示,当您配置URL时,所有参数必须在前端页面上传递,以跳到Orghomeview呈现的页面

  我们在这里看

  url(r'^(?pquery_result [。*])/query_book_result/$',views.query_book_result,name ='query_book_result')

  这是URL中的参数。URL本身被视为字符串。那么捕获捕获的参数必须是字符串

  您可以尝试一点,在query_book_result函数中添加一行

  如果IsInstance(query_result,str):query_result ='query_result在这里。

  核实

  在这里,您可以对其进行一些处理,将字符串变成列表:

  query_result = query_result.replace('[','')。代替 (']', '')。分裂 (',')

  但是实际上,列表中的内容仍然是字符串,而不是钥匙值的形式,而是仅输出而言,循环输出是可以的。

  第10节,案例客户关系管理系统,删除,纠正,充电笔记

  1.建立模型

  1.导入模型

  fromdjango.dbimportmodels

  2.创建一个学生桌

  classstudent(models.model):#c c c c

  name = models.charfield(max_length = 20)

  age = model.smallintegerfield()

  sex =模型。

  QQ = model.Charfield(max_length = 20,unique = true)

  phone = models.charfield(max_length = 20,unique = true)

  c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)

  e_time = models.detetimefield(verbose_name ='修改时间',auto_now = true)

  等级= models.foreignkey('等级',on_delete = models.set_null,null = true)

  IS_DELETE = model.booleanfield(default = false)#在常规开发过程中,我们不会直接删除数据,而是添加IS_DELETE字段的数据以标记数据的状态。

  def__str __(self):

  返回'%s-%s-%s'%(self.name,self.age,self.sex)

  3.创建学生详细信息表格

  ClassStudentDetail(Models.Model):#学生详细信息表

  num = models.charfield('id卡',max_length = 40,unique = true)

  College = Models.Charfield('毕业学校',max_length = 20,默认='')

  student = models.onetoonefield('student',on_delete = models.cascade,rection_name ='lidet')

  def__str __(self):

  返回'%s-%s'%(self.num,self.college)

  4.创建一个班级表

  classGrade(models.model):#类表

  name = models.charfield('class name',max_length = 20)

  num = models.charfield('分类',max_length = 20)

  def__str __(self):

  返回'%s-%s'%(self.name,self.num)

  5.创建一个课程表

  ClassCourse(Models.Model):#课程表

  name = models.charfield('课程名称',max_length = 20)

  student = models.manytomanyfield('学生',通过='注册')

  def__str __(self):

  返回'%s'%self.name

  6.创建学生表和课程表的中间手表

  classEnroll(models.model):#

  student = models.foreignkey('学生',on_delete = models.cascade)

  course = models.foreignkey('课程',on_delete = models.cascade)

  PAY = Models.FloatField('付款金额',默认值= 0)

  c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)

  def__str __(self):

  返回'%s'%self.pay

  ##

  2.实现其他,删除和调查功能实现

  1.索引页面视图功能

  fromdjango.shortcutsimportrender,重定向,反向

  fromdjango.httpimporttpresponse

  FromStudent.ModelSimportstudent,等级,StudentDetail

  fromdjango.db.modelsimportq

  fromdjango.core.paginatorimportpaginator

  #在这里创建您的视图。

  Defindex(请求):

  部分='学生名单'

  搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数

  ifsearch:

  ifsearch.isdigit():#如果是数字类型

  sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配

  else:#如果是字符类型

  sts = student.objects.filter(name = search,is_delete = false)#

  else:#搜索不匹配,并检查所有学生

  sts = student.objects.filter(is_delete = false)

  sts = sts.order_by('-c_time')#

  returnrender(请求,'student/index.html',context = {

  'sts':sts,

  “部分”:部分,

  “搜索”:搜索,

  })

  2.学生删除页面视图

  defstudent_delete(请求,PK):

  student = student.objects.get(pk = pk)#s s s s s s s p p p p p p p p p p s s s s

  student.is_delete = true#mark is_delete as true,

  student.save()#保存

  returnredirect(反向('student:index'))

  3.学生详细信息页面查看

  defstudent_detail(请求,PK):

  部分='学生详细信息'

  等级=等级。

  sts = student.objects.gets(pk = pk)#获取使用当前ID为PK的学生信息

  等级=等级。

  详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息

  returnrender(请求,'sut剂/student_detail.html',context = {

  “部分”:部分,

  “成绩”:等级,

  'sts':sts,

  “等级”:等级,

  “细节”:细节,

  })

  4.添加页面视图功能

  defstudent_add(请求):

  部分='添加学生信息'

  等级= grade.objects.all()#

  ifrequest.method =='get':

  returnrender(请求,'sut剂/student_detail.html',context = {

  “部分”:部分,

  “成绩”:等级,

  })

  ifrequest.method =='post':

  #获取课程信息

  grade_id = request.post.get('等级')#获取等级。

  尝试:

  等级=等级。

  除了:

  等级=无

  #获取学生信息名称,年龄,性别,QQ,电话

  数据= {

  'name':request.post.get('name'),

  'age':request.post.get('age'),

  'sex':request.post.get('sex'),

  'qq':request.post.get('qq'),

  “电话”:request.post.get('phone'),

  “等级”:与学生相关的等级#表

  }

  student = student.objects.create(**数据)

  #获取学生详细信息信息

  StudentDetail.Objects.create(

  num = request.post.get('num'),

  College = request.post.get('College'),

  学生=学生#桌协会

  治愈

  returnredirect(反向('student:index'))

  5.修改学生信息页面视图功能

  defstudent_edit(请求,PK):

  部分='修改学生信息'

  sts = student.objects.get(pk = pk)#查询ID学生是PK

  等级=等级。

  详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息

  ifrequest.method =='get':

  returnrender(请求,'sut剂/student_detail.html',context = {

  “部分”:部分,

  'sts':sts,

  “等级”:等级,

  “细节”:细节,

  })

  ifrequest.method =='post':

  #获取课程信息

  grade_id = request.post.get('等级')#从前端返回等级

  尝试:

  等级=等级。

  除了:

  等级=无

  #获取学生信息并修改

  student = student.objects.get(pk = pk)

  student.name = request.post.get('name')

  student.age = request.post.get('age')

  Student.Sex = request.post.get('性')

  student.qq = request.post.get('qq')

  student.phone = request.post.get('phone')

  student.grade =等级#桌协会

  #获取学生详细信息

  尝试:

  详细信息= student.detail#更正,关联表在学生中

  除了:

  详细信息= StudentDetail()

  细节。学生=学生#表协会,协会表在demail中

  devail.num = request.post.get('num')

  difail.college = request.post.get('College')

  lide.save()#保存

  student.save()#保存

  returnredirect(反向('student:index'))

  第三,分页函数实施

  1.主页的页面方法

  1.1主页的视图功能

  Defindex(请求):

  部分='学生名单'

  搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数

  ifsearch:

  ifsearch.isdigit():#如果是数字类型

  sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配

  else:#如果是字符类型

  sts = student.objects.filter(name = search,is_delete = false)#

  else:#搜索不匹配,并检查所有学生

  sts = student.objects.filter(is_delete = false)

  sts = sts.order_by('-c_time')#

  #分分

  total_num = sts.count()#总数据金额

  per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5

  page = int(request.get.get('page',1))#p p p p p p p p p 1

  p = paginator(sts,per_page,all_empty_first_page = true)

  sts = p.get_page(page)#每页显示的数据

  total_page = p.num_pages#总页码

  page_list = p.page_range#获取页面范围

  returnrender(请求,'student/index.html',context = {

  'sts':sts,

  “部分”:部分,

  “搜索”:搜索,

  'total_num':total_num,

  'total_page':total_page,

  “页面”:页面,

  'per_page':per_page,

  'page_list':page_list,

  })

  1.2,html中页码的设置

  navaria-label =“页面导航”样式=“ display:inline-black”

  ulclass =“分页”

  li {%ifpage == 1%} class =“禁用” {%endif%}

  ahref =“ {%如果付费1%} {%url'student:index'%}?page = {page | add:-1} per_page = {per_page} {%else%} {%url url'quttay'student:index'index'%}?page = {pag}} per_page = {{per_page}} {%endif%}“ aria-label =“ pronos”

  Spanaria-Hidden =“ true”以前/跨度

  /A

  /li

  {in page_list%}的i%}

  li {%ifpage == i%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {i} per_page = {per_page}” {}}}}}}/a/a/a/a/li

  {%endfor%}

  li {%ifpage == total_page%} class =“ disabled” {%endif%}

  ahref =“ {%如果付费topal_page%} {%url'student:index'%}?page = {page | add:1} per_page = {per_page} {%ell's} {%ell ans} {%url'suden'studen:inst studen:index'%}?page = {pag}} per_page = {{per_page}}} {%endif%}“ aria-label =“ next”“”

  Spanaria-Hidden =“ true”下一个/跨度

  /A

  /li

  /ul

  /nav

  ! - 单个按钮 -

  Divlass =“ BTN-ROUND”样式=“ Display:inline-Black; Margin-Top:-68px“”

  buttonType =“ button” class =“ btn btn btn-default dropdown-toggle” data-toggle =“下拉” aria-haspopup =“ true” aria-expanded =“ false”

  {per_page}} bar/page spanclass =“ caret”/span

  /按钮

  ulclass =“下拉菜单”“”

  liahref =“ {%url'学生:index'%}?page = {page}} per_page = 5“ 5”页/a/a/li

  liahref =“ {%url'student:index'%}?page = {page}} per_page = 10“ 10” 10英寸页/a/a/a/li

  liahref =“ {%url'学生:index'%}?page = {page}} per_page = 15“ 15”页/a/a/li

  liahref =“ {%url'student:index'%}?page = {page}} per_page = 20“ 20” 20“页/a/a/li

  /ul

  /div

  2.对于主页分页方法2(使用标签)

  2.1,索引中的视图功能

  Defindex(请求):

  部分='学生名单'

  搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数

  ifsearch:

  ifsearch.isdigit():#如果是数字类型

  sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配

  else:#如果是字符类型

  sts = student.objects.filter(name = search,is_delete = false)#

  else:#搜索不匹配,并检查所有学生

  sts = student.objects.filter(is_delete = false)

  sts = sts.order_by('-c_time')#

  #分分

  total_num = sts.count()#总数据金额

  per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5

  page = int(request.get.get('page',1))#p p p p p p p p p 1

  p = paginator(sts,per_page,all_empty_first_page = true)

  sts = p.get_page(page)#每页显示的数据

  total_page = p.num_pages#总页码

  page_list = p.page_range#获取页面范围

  returnrender(请求,'student/index.html',context = {

  'sts':sts,

  “部分”:部分,

  “搜索”:搜索,

  'total_num':total_num,

  'total_page':total_page,

  “页面”:页面,

  'per_page':per_page,

  'page_list':page_list,

  })

  2.2。在templatetags文件夹中创建student_custormer_tags.py

  #!/usr/bin/python

  # - * - 编码:UTF-8 - * -

  #作者:CYB时间:2019/5/25 23:34

  FromDjangoImportTemplate

  寄存器= template.library()

  @register.inclusion_tag('student/paginitor.html',take_context = true)

  defipination_html(上下文):#d d d d d d d d d d d d上下

  total_page = context ['total_page']#总页码

  pay = context ['page']#显示第一页的数据

  page_list = context ['page_list']#页范围

  per_page = context ['per_page']#每个页面号码

  '''

  假设total_page = 6

  两个页码控制方法:

  当num = 1#当前页面的当前页面上有几页

  上一个1 2 3下一页

  前4 5 6下一页

  上一页1 2下一页

  前5 6个下一页

  当num = 2#当前页面的当前页面上有几页

  上一个1 2 3下一页

  上一个1 2 3 4下一页

  上一个1 2 3 4 5下一页

  前2 3 4 5 6下一页

  前4 5 6下一页

  '''

  pay_list = []

  num = 2

  #1,左 +当前页面上显示的页码列表

  #1.1,当左边不够时,页面范围1到当前页面

  ifpage-num = 0:

  foriinrange(1,第+1页):

  page_list.append(i)

  else:#当左侧足以显示时,页面范围为当前页面的PAG-NUM

  foriinrange(Page-num,Page+1):

  page_list.append(i)

  #2,右侧显示的页码列表 +当前页面

  #2.1,当右边不够时,页码范围当前页面到total_page

  ifpage+num = total_page:

  foriinrange(Page+1,total_page+1):

  page_list.append(i)

  #2.2,当右侧足够时,页面范围(当前页+1)to(当前页 +num)

  别的:

  forInrange(页+1,页+num):

  page_list.append(i)

  返回 {

  'total_page':total_page,

  “页面”:页面,

  'page_list':page_list,

  'per_page':per_page

  }

  2.3,构建新构建的标签渲染模板paginitor.html

  ulclass =“分页”

  li {%ifpage == 1%} class =“禁用” {%endif%}

  a {%ifpage1%} href =“ https://www.shouxicto.com/article/ {%url'student:index'%}?{{{per_page}} {%endif%}“ aria-label =“以前”

  Spanaria-Hidden =“ true”?/span

  /A

  /li

  {page_list%的page_num%}

  li {%ifpage_num == page%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {page_num} per_page = {per_page}}}}}}} {page_num} {page_num}

  {%endfor%}

  li {%ifpage == total_page%} class =“ disabled” {%endif%}

  a {%ifpage total_page%} href =“ https://www.shouxicto.com/article/ {{request.path}}?}} {%endif%}“ aria-label =“ next”

  Spanaria-Hidden =“ true”?/span

  /A

  /li

  /ul

  2.4。在index.html中导入后退出

  1.导入:{%加载student_customer_tags%}

  2.报价:

  nav aria-label =“页面导航”样式=“ display:inline-black”

  {%pagination_html%}

  /nav

  第四页显示

  1.主页显示

  2.添加页面显示

  3.修改页面显示

  名称参数可以给出匹配的URL地址。通常用于模板。您也可以使用反向进行页面重定向。

  1.对于应用程序中的书籍中的urls.py(命名为URL)

  2. views.py在应用程序中的书籍中(重定向是重定向方向,反面是将URL的名称解析为URL本身的函数)

  1.名称参数可以给该URL一个合适的名称。通过使用URL的名称,将来在视图或模板中使用此名称,您只需要使用此名称。其原因是防止URL来自更改,这将导致在其他地方使用此URL的位置的更改,但是如果以该名称获取,则不会进行任何更改。

  2.注意:

  1.模板在哪里?

  2.在项目的主要目录中制作模板路径配置;将设置的寺庙目录路径添加到HTML模板的模板目录中。

  注意:反向方法中还可以有夸尔格斯参数。参数直接传递给您要在反面解析后要跳到的URL路径中的捕获参数,以达到传递参数的效果。

  跳跃和重定向到非常常见的场景是登录并取消后返回当前页面。为您提供登录和取消示例。

  例如,用户正在浏览文章,发现要下载文章的附件需要登录。此时,单击登录链接并将其传输到登录页面。输入用户名和密码后,它将自动返回到原始文章所在的页面(目前,许多网站使用AJAX方法弹出对话框登录,效果更好)

  该怎么做?以下是Django的实现,但是大多数Web框架都可以完成。

  注销:

  由于无需取消页面,因此相对简单,使用http_referr,django的取消页面是这样写的:

  def logout_user(请求):

  注销(请求)

  返回httpresponseredirect(request.meta.get('http_referr','/'))

  登录操作:

  登录操作相对复杂,因为通常有单独的登录页面。如果登录成功,则HTTP_REFERR是登录页面的URL,而不是上一页。

  您可以使用Django的会话。转移到登录时,您会使用页面的获取请求。此时,在会话中记录http_referr。当用户输入用户名密码登录(发布请求)时,您可以从会话中获取它:

  def login_user(请求):

  如果request.method =='get':

  #记住源的来源,如果不是,则将其设置为主页('/')

  request.session ['login_from'] = request.meta.get('http_referr','/')

  #todo:显示登录页面,blablabla

  Elif Research.Method =='Post':

  #TODO:用户登录操作,Blablabla

  #Reset到源来源

  返回httpresponserectirect(request.session ['login_from'])

  最后一个重定向,有时用户需要感觉到重定向返回,只需写一个简单的页面告诉用户两秒钟,然后更改相应的登录代码:

  p转移到两秒钟后转移到以下链接。如果您很长一段时间没有响应,请直接单击:/p

  pa href =“ https://www.shouxicto.com/article/ {{refresh_url}}”

  meta http-equiv =“ refresh” content =“ 2; url = {{refresh_url}}”

  结论:以上是首席CTO的所有内容都注明了如何为每个人引入Djangoreverse。感谢您阅读本网站的内容。我希望这对您有帮助。有关djangoreverse如何进口台的更多信息。