Django-HttpResponse、render、redirect区别 及 url 变化区别

本文深入解析Django中的HttpResponse、render与redirect的区别,重点阐述它们在URL处理上的不同作用,以及如何根据需求选择合适的方法实现页面跳转或刷新。

Django-HttpResponse、render、redirect区别 及 url 变化区别

HttpResponse

作用为内部传递一个参数,返回给浏览器

from django.shortcuts import HttpResponse

def from_request(request):
	# Todo
	return HttpResponse('OK')

render

可接受三个参数,分别为请求request, 需要渲染的模板template,以及向模板传递的参数context,render(request, ‘template’, context)
原型

def render(request, template_name, context=None, content_type=None, status=None, using=None):
    content = loader.render_to_string(template_name, context, request, using=using)
    return HttpResponse(content, content_type, status)

使用方式

from django.shotcuts import render

def from_request(request):
	# Todo
	# return render(request, 'template.html', context)
	# or
	return render(request, 'template.html')

redirect

接受一个URL参数,表示让浏览器跳转去指定的URL.
原型

def redirect(to, *args, permanent=False, **kwargs):
    redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect
    return redirect_class(resolve_url(to, *args, **kwargs))

使用方式

from django.shotcuts import redirect

def from_request(request):
	# Todo
	return redirect(request, 'page')

render 与redirect 时url变化区别

urls.py中绑定了你跳转时浏览器显示的url

初学时经常使用render的形式,发现url显示为当前request绑定的url,如果处理请求后结束后渲染了新的页面不过Url并没有跳转。
例如


# urls.py
urlpatterns=[
	path('from_request/', views.from_request, name='from_request')
]

# views.py
def from_request(request):
	if condition1:
		return render(request, 'page1.html')
	else 
		return render(request, 'page2.html')

此时无论跳转page1还是page2 url的显示都会是 yoursite/from_request

这可以归类为设计的问题,及绑定的url就应该是目的渲染的html
但如果想要跳转时url也跟着改变即可采用redirect方式重新返回绑定的url
例如


# urls.py
urlpatterns=[
	path('from_request/', views.from_request, name='from_request'),
	path('to_page1/', views.to_page1, name='to_page1'),
	path('to_page2/', views.to_page2, name='to_page2'),
]

# views.py
def from_request(request):
	if condition1:
		return redirect('to_page1/')
	else 
		return redirect('to_page2/')
Django 中进行 Web 开发时,导入和使用模型、视图以及响应函数是构建动态网站的基础步骤。以下是详细的导入和使用方法。 ### 导入必要的模块 在 `views.py` 文件中,需要导入以下模块以处理请求和响应: - `render`: 用于渲染 HTML 模板。 - `HttpResponse`: 用于返回简单的 HTTP 响应。 - `redirect`: 用于重定向到指定的 URL- `UserInfo` 和 `Department` 模型:用于与数据库交互。 导入代码如下: ```python from django.shortcuts import render, HttpResponse, redirect from .models import UserInfo, Department ``` ### 使用 `render` 渲染模板 `render` 用于将数据传递给 HTML 模板并返回渲染后的页面。例如,假设有一个 `userinfo.html` 模板: ```python def userinfo(request): if request.method == 'POST': form = UserInfoForm(request.POST) if form.is_valid(): context = { 'uname': request.POST['username'], 'udep': form.cleaned_data['dep'], 'uemail': request.POST['email'] } return render(request, 'show_info.html', {'userinfo': context}) else: form = UserInfoForm() return render(request, 'userinfo.html', {'form': form}) ``` ### 使用 `HttpResponse` 返回简单响应 `HttpResponse` 可以直接返回一个字符串作为响应: ```python def index(request): return HttpResponse("This is formapp homepage.") ``` ### 使用 `redirect` 重定向 `redirect` 用于将用户重定向到指定的 URL 或视图函数: ```python from django.shortcuts import redirect def mylogin(request): # 登录逻辑 return redirect('index') ``` ### 使用 `UserInfo` 和 `Department` 模型 假设 `UserInfo` 和 `Department` 模型定义如下: ```python from django.db import models class Department(models.Model): name = models.CharField(max_length=100) class UserInfo(models.Model): name = models.CharField(max_length=32) password = models.CharField(max_length=64) age = models.IntegerField() department = models.ForeignKey(Department, on_delete=models.CASCADE) ``` #### 查询数据 可以通过模型查询数据库中的数据: ```python def get_user_info(request): users = UserInfo.objects.all() return render(request, 'user_list.html', {'users': users}) ``` #### 创建数据 可以通过模型创建新的记录: ```python def create_user(request): department = Department.objects.get(name='IT') user = UserInfo(name='John', password='123456', age=30, department=department) user.save() return redirect('index') ``` #### 更新数据 可以通过模型更新已有的记录: ```python def update_user(request, user_id): user = UserInfo.objects.get(id=user_id) user.name = 'New Name' user.save() return redirect('index') ``` #### 删除数据 可以通过模型删除记录: ```python def delete_user(request, user_id): user = UserInfo.objects.get(id=user_id) user.delete() return redirect('index') ``` ### 总结 在 Django 中,导入 `render`、`HttpResponse` 和 `redirect` 是处理请求和响应的基础。通过模型 `UserInfo` 和 `Department` 可以方便地与数据库交互,实现数据的查询、创建、更新和删除操作。这些功能共同构成了 Django Web 开发的核心部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值