对Django 转发和重定向的实例详解

yipeiwu_com7年前Python基础

转发和重定向:

转发:一次请求和响应,请求的地址没有发生变化,如果此时刷新页面,就会出现重做现象。

重定向:一次以上的请求和响应,请求地址发生一次以上的变化,如果此时刷新页面,就不会发生重做现象。

我来举个简单的列子,比如我手机号上不了4G网,我打电话给10086,说了我这个情况后,她会把这个情况反映给技术人员,来帮我解决这个问题,如果说我又有这个问题的话直接点击重播就好了,但我重播的是10086这个号码,然后再有她转给技术人员,如果再有问题还得继续这样,那么就显得很麻烦了,那这时候10086的工作人员可以在我拨打10086的时候直接转到技术人员哪里,虽然外面的拨的电话是10086,但接的却是技术人员的号码。虽然这个例子很垃圾,但差不多就是这个意思。

这个问题可以在原来的项目上改一下就可以了,因为我前面的项目早已经介绍过了,所以就不说了,就在原来的文件上进行更改

如果不做重定向的话,我们在提交用户名和密码的时候,这时候点刷新时,用户名和密码会一直提交,如果数据库没有做限制的话,那么就会出现多个相同的用户名和密码。

要解决这个问题,首先我们要做一个命名空间,将我们注册的每个用户名用id来进行绑定,确保唯一性,而且注册成功后直接跳转到show.html那里去,而且还可以把用户名和密码显示出来

1. 首先我们要在Djangoproject这个容器的url.s.py文件里面加入命名空间

我这里写入命名空间,自定义命名空间名为zc,这个在view.py里面会写到

2. 根据我之前写的博客,容器的urls.py会查找项目的urls.py,这里也要做一些修改

这里我们在3行中写app_name='zc',这句也是命名空间,这是为了对应view.py中redirect函数里面reverse的zc:show,第6行中加了<int:id>,这个的意思是将数据库的id使用进来了,这样我们就可以用show/id,可以显示数据的id,也可更改id来查找数据,这个和view.py里面的args=[zc.id]有关,后面那个name='show' 的意思是取个别名,对应的也是view.py里面的zc:show,表名这个命名空间里面放的是show函数。

3.下面来看view.py文件

这里我们我多导入两个函数,分别是redirect(重定向问题)、reverse(解决跳转路径)。

4. views.py这里我们多定义了一个show函数,这里加了函数要在temp1项目下的urls.py下也要加,告诉urls.py有这个函数

里面的参数是id,这个参数要从外界获取,这个参数就是<int:id>,是在urls.py那里获取到的,在return中我们把我们在15行中得到的用户名和密码返回出去,15行get(pk=id)的意思是获取到主键的id,这个id里面有用户名和密码,这个id号是数据库表在创建前自动创建的,之前的文章我提到过,这里就不多说。

5. 返回的内容会赋值给show.html,我们会用两个参数来接收

6. 我们来运行项目并注册

7. 然后会跳转到show页面

这里会把用户名和密码显示出来,而链接里面的18则是id,这里表名我们注册的用户名在数据库里面的id号是18,我们也可以更改这个id号,改为17的话则会显示出id号为17的用户名和密码。

以上这篇对Django 转发和重定向的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同。因为我是搭配 MySQL InnoDB 使用,所以使用其他数据库的也不能完全照搬本文。...

Cpy和Python的效率对比

Python 语言的初学者, 特别是"惊奇者"(也就是那种第一眼就被毫无意义的某些特性吸引, 之后持续说服自己的人)认为 Python 不需要 C 语言的 for 语句, 因为他们能用优...

Python获取脚本所在目录的正确方法

1.以前的方法如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path...

利用anaconda保证64位和32位的python共存

背景 喵哥想在MFC中调用python脚本,在原来的代码中包含一个只支持x86的库文件(超级核心的文件),原本安装的python是x64的,强行运行程序会出现python头文件里的函数无...

Form表单及django的form表单的补充

Form表单及django的form表单的补充

form 表单中的button按钮 <button>提交</button> :放在form表单中,会有一个提交事件,会提交form数据, <input ty...