Это 6-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.
Views Django часто использует ответ HTTP (), Render () и Redirect (), чтобы ответить на запросы. Они называются «три мушкетера» просмотра функций.
Функция HTTPResponse()
функция рендеринга()
Функция render() предоставляется модулем django.shortcuts.Его функция состоит в том, чтобы генерировать объект Http Response и возвращать его на основе файла шаблона и переменной типа словаря, переданной в файл шаблона.
Формат функции
render(request, template_name, context=None,content_type=None, status=None)
-
request: позиционный параметр, представляющий веб-запрос, переданный в функцию представления, инкапсулирующий все данные в заголовке запроса, который на самом деле является запросом параметра представления.
-
Template_name: список позиций должен быть выбран, относится к имени файла шаблона для использования, который, как правило, файл HTML в каталоге шаблонов.
-
контекст: необязательный параметр, данные относятся к типу словаря, по умолчанию используется пустой словарь, который сохраняет переменные для передачи в файл HTML.
-
content_type: необязательный именованный параметр для установки типа MIME (многоцелевого расширения почты Интернета) создаваемого документа. По умолчанию используется значение DEFAULT_CONTENT_TYPE text/html.
-
status: необязательный параметр, указывающий код состояния ответа, по умолчанию 200.
пример:
from django.shortcuts import renderdef test_view(request): # 视图的代码写在这里 def xxx(request): xxxxxxx return render(request, 'index.html', {'welcome': 'hello world!'} ,content_type='text/html') # 传递变量名为welcome值为'hello world!'的变量
функция перенаправления()
Функция redirect() получает параметр, сообщающий браузеру о перенаправлении на указанный URL-адрес; этот параметр может быть объектом модели данных (Model), именем функции представления или URL-адресом.
Когда параметр является объектом модели данных (Model)
Функция Redirect () позвонит функцию get_absolute_url (), определенной в модели данных, получите значение URL, возвращенное функцией, а затем перейти к URL.
пример
URL. Друзья:
.....
path('dep/<int:dep_id>/',views.depdetail,name='depdetail'),
path('test_redirect/',views.test_redirect),
....
models.py:
#导入数据模块
from django.db import models
# 导入反向解析函数
from django.urls import reverse
# 部门数据模型(部门数据表)
class department(models.Model):
# 部门名称,为字符类型
dep_name=models.Char Field(max_length=32,verbose_name='部门名称',unique=True, blank=False)
# 部门备注说明
dep_script=models.Char Field(max_length=60,verbose_name='备注',null=True)
# 数据模型的get_absolute_url()方法
def get_absolute_url(self):
# 反向解析URL,解析成/dep/ self.pk /
return reverse('depdetail',kwargs={'dep_id':self.pk})
# 在数据模型department中定义了一个函数get_absolute_url(),该函数返回一个URL。
reverse() — это функция обратного синтаксического анализа URL-адресов, значение ее первого параметра — «depdetail», который представляет собой элемент конфигурации URL-адреса с именем depdetail. Процесс синтаксического анализа реверса: найдите элемент конфигурации с именем depdetail в urls.py в текущем приложении test_view, функция reverse() найдет соответствующий URL-адрес в соответствии с переданным ей параметром типа словаря (kwargs={'dep_id' :self.pk}) для объединения и, наконец, анализа для создания полного URL-адреса.
views.py:
from django.shortcuts
import render,Http Response,redirect
from . import models
def depdetail(request,dep_id):
# 根据传入的参数值取出一条记录
obj=models.department.objects.get(id=dep_id)
# 返回Http Response对象
return Http Response('部门:'+obj.dep_name+',备注:'+obj.dep_script)
def test_redirect(request):
obj=models.department.objects.get(id=1)
# 用redirect()重定向,参数是数据模型对象,所以重定向到数据模型get_absolute_url生成的URL
# 这个URL对应视图函数views.depdetail(),实际上调用这个函数
return redirect(obj)
В функции представления test_redirect() есть функция redirect().Здесь функция redirect() разделена на следующие три шага.
- Поскольку параметр obj, переданный в функцию redirect(), является объектом экземпляра модели данных (записью данных), а классом модели данных этого объекта является отдел, вызывается метод объекта get_absolute_url().
- Имя элемента конфигурации функции get_absolute_url () и имя элемента url obj beverform ()).
- После того, как функция reverse() получает URL-адрес, она обращается к файлу urls.py, чтобы найти соответствующую связь, обнаруживает, что соответствующей функцией просмотра является depdetail(), и, наконец, выполняет эту функцию.
Когда параметр является именем функции просмотра
Функция redirect() обратно анализирует URL-адрес с помощью имени функции просмотра и параметров функции просмотра и перенаправляет на этот URL-адрес. Следующий код передает имя функции представления depdetail и параметры
def test_redirect(request):
# 视图函数depdetail()有参数dep_id
return redirect('depdetail',dep_id=2)
Процесс выполнения функции redirect() здесь заключается в том, чтобы сначала проанализировать URL-адрес в обратном порядке, найти функцию просмотра, соответствующую URL-адресу в файле urls.py, и выполнить функцию просмотра depdetail(). Со стороны можно понять, что функция просмотра depdetail() вызывается напрямую через redirect().
Когда параметр является полным URL
Функция redirect() напрямую открывает веб-страницу, на которую указывает этот URL. параметры имеютhttp:// — это префикс, это полный URL-адрес, например: return redirect('http://127.0.0.1:8000/dep/2/') и вернуться redirect('http://url/').
Параметр - это URL
return redirect('/dep/66/')