一、引言
Django项目如何添加新功能?
在之前的文章中,我们学会了对web框架的封装优化处理,其中的urls.py和views.py尤为重要
(1)添加URL映射
- 在项目的
urls.py
文件中,通过导入相应的应用(app)及其视图函数,并使用path()
或include()
函数来定义 URL 映射规则。 - 例如,如果要在名为 "myapp" 的应用中添加一个用于显示博客文章列表的 URL,则可以在
urlpatterns
中添加如下配置
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.blog_list, name='blog_list'),
]
- 这将把 "/blog/" 映射到
views.blog_list
视图函数。
(2)添加视图函数
- 然后,在对应的 "myapp/views.py" 文件中,创建视图函数以处理 HTTP 请求。
- 例如,
blog_list
可能如下实现:
from django.shortcuts import render
from .models import BlogPost
def blog_list(request):
posts = BlogPost.objects.all()
return render(request, 'myapp/blog_list.html', {'posts': posts})
- 这里假设有一个名为 "BlogPost" 的模型,并有一个包含模板
blog_list.html
的对应 HTML 模板文件。
而在html文件中我们仍需要学习三个最基础也最重要的类。接下来我们会一一叙说
二、小白必会三板斧
1、HttpResponse
HttpResponse
是Django中用于返回HTTP响应的类。通过使用HttpResponse
类,你可以向客户端发送包含特定内容的HTTP响应。以下是关于HttpResponse
的一些基本信息:
-
创建HttpResponse对象:
- 要创建一个
HttpResponse
对象,你可以使用以下方法:from django.http import HttpResponse def my_view(request): # 创建一个包含特定内容的HttpResponse对象 response = HttpResponse("Hello, World!") return response
- 要创建一个
-
设置响应内容:
- 你可以通过传递一个字符串作为参数来设置响应内容。这个字符串可以包含HTML、JSON等内容。
- 例如,
HttpResponse("Hello, World!")
会返回一个包含"Hello, World!"文本的HTTP响应。
-
设置响应状态码:
- 你可以通过在实例化
HttpResponse
对象时传递status
参数来设置响应的状态码。 - 例如,
HttpResponse("Page not found", status=404)
会返回一个包含"Page not found"文本的HTTP响应,并将状态码设置为404(页面未找到)。
- 你可以通过在实例化
-
设置响应头:
- 除了设置内容和状态码外,你还可以设置响应头。可以通过在实例化
HttpResponse
对象后,通过调用response['Header-Name'] = 'value'
来设置响应头。
- 除了设置内容和状态码外,你还可以设置响应头。可以通过在实例化
-
返回HttpResponse对象:
- 在视图函数中,最后要返回
HttpResponse
对象,以便Django能够将其发送给客户端。 - 例如,
return HttpResponse("Hello, World!")
会将包含"Hello, World!"文本的HTTP响应发送给客户端。
- 在视图函数中,最后要返回
HttpResponse
是Django中常用的类之一,用于处理HTTP请求并返回相应的内容。
2、render
render
是Django中一个常用的快捷函数,用于将数据渲染到指定的模板中,并返回一个包含渲染内容的HttpResponse
对象。render
函数通常用于将动态生成的数据呈现给用户,结合HTML模板来构建最终的页面。
下面是关于render
函数的一些基本信息:
-
使用方法:
- 首先,确保在视图函数中导入
render
函数:from django.shortcuts import render
- 然后,使用
render
函数将数据渲染到指定的模板中:def my_view(request): data = {'key': 'value'} # 要传递给模板的数据 return render(request, 'template_name.html', data)
- 首先,确保在视图函数中导入
-
参数说明:
request
:HTTP请求对象,通常是视图函数的第一个参数。'template_name.html'
:要渲染的模板文件的名称。data
:要传递给模板的数据,通常是一个字典,包含需要在模板中显示的变量和数值。
-
模板渲染:
- 在模板中,你可以通过使用模板语言(Django模板引擎)来访问传递的数据,并将其动态显示在页面上。
- 例如,在模板中使用
{{ key }}
来显示传递的数据值。
-
返回响应:
render
函数将渲染后的内容包装在HttpResponse
对象中并返回给客户端。- 它简化了将数据与HTML模板结合的过程,并提供了一种方便的方式来生成动态内容。
使用render
函数可以更轻松地将数据传递给模板,并生成最终的页面内容,这在开发Web应用程序时非常有用。
3、redirect
redirect
是Django中的一个快捷函数,用于将用户重定向到指定的URL。当视图函数需要将用户重定向到另一个页面时,可以使用redirect
函数。
下面是一个简单的示例,演示如何在Django视图函数中使用redirect
函数:
from django.shortcuts import redirect
def my_view(request):
# 一些逻辑处理...
if 条件满足:
return redirect('目标URL') # 重定向自己的函数不用写前缀
else:
return redirect('另一个URL')
在上面的示例中,根据特定条件,如果条件满足,则用户将被重定向到目标URL
,否则将被重定向到另一个URL
。redirect
函数接受一个URL作为参数,并返回一个HttpResponseRedirect
对象,将用户重定向到指定的URL。
三、Django便捷函数
想要深入了解的可以点击官方链接
在Django中,便捷函数(shortcut functions)是一组简单而方便的函数,用于执行常见的任务,如渲染模板、重定向用户、返回JSON响应等。这些函数位于django.shortcuts
模块中,并提供了一种简洁的方式来处理常见的任务,而无需编写大量的代码。
以下是一些常用的Django便捷函数的详细介绍:
-
render
函数:- 功能:将数据渲染到指定的模板中,并返回一个包含渲染内容的
HttpResponse
对象。 - 用法:通常用于将动态内容呈现给用户,例如将数据库中的数据传递给模板进行渲染。
- 示例:
from django.shortcuts import render def my_view(request): context = {'name': 'Alice', 'age': 30} return render(request, 'my_template.html', context)
- 功能:将数据渲染到指定的模板中,并返回一个包含渲染内容的
-
redirect
函数:- 功能:将用户重定向到指定的URL。
- 用法:常用于处理表单提交后的重定向或其他页面跳转需求。
- 示例:
from django.shortcuts import redirect def my_view(request): # some logic here return redirect('/new_url/')
-
get_object_or_404
函数:- 功能:获取数据库中的单个对象,如果对象不存在,则引发
Http404
异常。 - 用法:用于获取特定对象,如果对象不存在,则返回404错误页面。
- 示例:
from django.shortcuts import get_object_or_404 from myapp.models import MyModel def my_view(request, id): obj = get_object_or_404(MyModel, pk=id) return render(request, 'my_template.html', {'object': obj})
- 功能:获取数据库中的单个对象,如果对象不存在,则引发
-
Http404
异常:- 功能:引发HTTP 404错误,用于指示请求的资源不存在。
- 用法:通常与
get_object_or_404
等函数一起使用,以处理对象不存在的情况。 - 示例:
from django.http import Http404 def my_view(request, id): if not object_exists: raise Http404("Object does not exist")
-
get_list_or_404
函数:- 功能:获取数据库中的对象列表,如果列表为空,则引发
Http404
异常。 - 用法:类似于
get_object_or_404
,但用于获取对象列表。 - 示例:
from django.shortcuts import get_list_or_404 from myapp.models import MyModel def my_view(request): objects = get_list_or_404(MyModel, some_filter=True) return render(request, 'my_template.html', {'objects': objects})
- 功能:获取数据库中的对象列表,如果列表为空,则引发
这些便捷函数在Django开发中非常有用,可以帮助简化代码、提高开发效率,并确保代码的可读性和可维护性。
四、补充
1、django自带重启功能
- 当识别到项目中代码有变化之后 隔段时间会自动重启 但是有时候较慢
- 这也就是我们经常看见运行结果的窗口中不断刷新的现象
2、默认返回临时重定向
- 默认情况下,
redirect()
返回临时重定向。 - 所有以上形式都接受
permanent
参数;如果设置为True
会返回一个永久重定向:
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
3、临时重定向和永久重定向的区别
- 临时重定向(响应状态码:302)和永久重定向(响应状态码:301)对普通用户来说是没什么区别的,它主要面向的是搜索引擎的机器人。
- A页面临时重定向到B页面,那搜索引擎收录的就是A页面。
- A页面永久重定向到B页面,那搜索引擎收录的就是B页面。