Django 自学笔记兼学习教程第2章第4节——视图常用

点击查看教程总目录

1 - shortcut

视图函数需要返回一个HttpResponse对象或者其子类对象。

不过很多时候直接手写建立一个HttpResponse对象比较麻烦。

所以Django实现了建立HttpResponse对象的一些快捷方法:

这些方法收集在django.shortcuts包中。

比如下一章将会频繁使用的render方法,

还有本章第二部分会介绍的redirect方法,

都是django.shortcuts包中的。

django.shortcuts 官方文档:shortcuts

django.shortcuts 官方介绍如下:

The package django.shortcuts collects helper functions and classes that “span” multiple levels of MVC.

In other words, these functions/classes introduce controlled coupling for convenience’s sake.

2 - reverse 反向解析

知道urlpattern名,可通过reverse函数反向解析出对应的url。

该方法常在模型的get_absolute_url()get_success_url()中用到,然后用于重定向,一般直接使用本文第三部分的重定向语法覆盖实现这些。

reverse方法位于django.urls中,但也可以从django.shortcuts包中导入。

其使用语法为:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)

使用示例:

比如有url:

path('login/', views.home, name="login"),
path('user/login/<slug:kind>', views.login, name="login"),

那么在django交互式命令行下,效果如下

>>> reverse("login")
'/user/login/'
>>> reverse("login", kwargs={'kind': 'student'})
'/user/login/student'

3 - 重定向

重定向场景:用户未登录情况下,访问需要登录才能访问的url,往往需要重定向到登录页。

重定向代码一般写在视图函数中:视图函数返回一个重定向对象django.http.HttpResponseRedirect

不过我们一般使用shortcut里的redirect方法来获得一个重定向对象。

语法如下:

redirect(to, *args, permanent=False, **kwargs)

根据传递的参数返回一个对应的HttpResponseRedirect。

传入的参数可以是:

  • 一个模型(model): 模型的get_absolute_url()方法将被调用。
  • 一个视图名,可能带有参数: 将调用reverse()函数来反向解析名称。
  • 绝对或相对URL: 将按原样用于重定向位置。

举例:

比如有url:

path('user/login/<slug:kind>', views.login, name="login"),

那么在django交互式命令行下,效果如下

>>> from django.shortcuts import redirect
>>> redirect("login", kind='student')
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/user/login/student">
>>> redirect("/user/login/student")
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/user/login/student">

Django笔记&教程 2-4 视图常用的更多相关文章

  1. Django笔记&教程 2-3 视图(view)函数介绍

    Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...

  2. Django笔记&教程 7-1 基于类的视图(Class-based views)介绍

    Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...

  3. Django笔记&教程 总目录

    本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...

  4. Django笔记&教程 3-3 模板常用语法

    Django 自学笔记兼学习教程第3章第3节--模板常用语法 点击查看教程总目录 本文主要参考:https://docs.djangoproject.com/en/2.2/ref/templates/ ...

  5. Django笔记&教程 1-2 二 常用配置

    Django 自学笔记兼学习教程第1章第2节--二 常用配置 点击查看教程总目录 新手建议简单浏览本文,不理解的建议跳过,不要强行理解. Django的设置涉及多个模块,需要了解Django的一些相关 ...

  6. Django笔记&教程 6-2 表单(Form)基础操作

    Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...

  7. Django笔记&教程 2-1 URL与View关系

    Django 自学笔记兼学习教程第2章第1节--URL与View关系 点击查看教程总目录 参考:how-django-processes-a-request 1- Django处理请求(request ...

  8. Django笔记&教程 3-1 模板(Template)基础

    Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...

  9. Django笔记&教程 4-2 模型(models)中的Field(字段)

    Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...

随机推荐

  1. Jmeter压测学习3---通过正则表达式提取token

    上一个随笔记录的是用json提取器提取token,这个随笔记录用正则表达式提取token 一.添加正则表达式 登录右击添加->后置处理器->正则表达式提取器 正则提取器参数说明: 要检查的 ...

  2. bug 找不到或无法加载主类main.java.*

    开发时遇到的的一个问题,不知道是什么引起的,一个maven springboot 的项目,主类启动的时候报错,说没找到 主类,起先怀疑是springboot的问题,随手写一个单独的类,有main方法, ...

  3. java文件上传工具包

    java 文件上传工具包 主要有两个方法:单文件上传和多文件上传 @Slf4j public class UploadFileUtil { //上传单张图片 public String uploadP ...

  4. java统一返回标准类型

    一.前言.背景 在如今前后端分离的时代,后端已经由传统的返回view视图转变为返回json数据,此json数据可能包括返回状态.数据.信息等......因为程序猿的习惯不同所以返回json数据的格式也 ...

  5. MSSQL还原数据库,更改用户登陆权限

    有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...

  6. 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)

    1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...

  7. DRF的action装饰器

    1.action装饰器 Django默认的路由分发规则决定了视图函数只能以get.post等请求方式命名,如果想要使用自定义的方式命名,我们可以使用action去映射请求方法名与自定义方法 view. ...

  8. iOS能否自动扫描周边wifi信息并通过密码连接

    能否获取系统wifi列表信息 不能,只能获取用户当前连接的wifi信息 https://developer.apple.com/forums/thread/112177 https://develop ...

  9. C11 (GNU Dialect) -std=gnu11 和 -std=c11

    C11 (GNU Dialect) -std=gnu11 和 -std=c11 C11 (GNU Dialect) -std=gnu11 和 -std=c11 用于 IntelliSense 的 C ...

  10. Vim合并行

    日常常用到多行合并的功能,记录如下: 第一种, 多行合并成一行,即: AAAAABBBBBCCCCC 合并为:AAAAA BBBBB CCCCC 方法1: normal状态下 3J 其中的3是范围,可 ...