首页 > 其他分享 >Django框架之小白必会三板斧

Django框架之小白必会三板斧

时间:2024-03-28 22:23:08浏览次数:23  
标签:函数 render 三板斧 request Django 之小白 HttpResponse 模板

一、引言

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的一些基本信息:

  1. 创建HttpResponse对象

    • 要创建一个HttpResponse对象,你可以使用以下方法:
      from django.http import HttpResponse
      
      def my_view(request):
          # 创建一个包含特定内容的HttpResponse对象
          response = HttpResponse("Hello, World!")
          return response
      
  2. 设置响应内容

    • 你可以通过传递一个字符串作为参数来设置响应内容。这个字符串可以包含HTML、JSON等内容。
    • 例如,HttpResponse("Hello, World!")会返回一个包含"Hello, World!"文本的HTTP响应。
  3. 设置响应状态码

    • 你可以通过在实例化HttpResponse对象时传递status参数来设置响应的状态码。
    • 例如,HttpResponse("Page not found", status=404)会返回一个包含"Page not found"文本的HTTP响应,并将状态码设置为404(页面未找到)。
  4. 设置响应头

    • 除了设置内容和状态码外,你还可以设置响应头。可以通过在实例化HttpResponse对象后,通过调用response['Header-Name'] = 'value'来设置响应头。
  5. 返回HttpResponse对象

    • 在视图函数中,最后要返回HttpResponse对象,以便Django能够将其发送给客户端。
    • 例如,return HttpResponse("Hello, World!")会将包含"Hello, World!"文本的HTTP响应发送给客户端。

HttpResponse是Django中常用的类之一,用于处理HTTP请求并返回相应的内容。

2、render

render是Django中一个常用的快捷函数,用于将数据渲染到指定的模板中,并返回一个包含渲染内容的HttpResponse对象。render函数通常用于将动态生成的数据呈现给用户,结合HTML模板来构建最终的页面。

下面是关于render函数的一些基本信息:

  1. 使用方法

    • 首先,确保在视图函数中导入render函数:
      from django.shortcuts import render
      
    • 然后,使用render函数将数据渲染到指定的模板中:
      def my_view(request):
          data = {'key': 'value'}  # 要传递给模板的数据
          return render(request, 'template_name.html', data)
      
  2. 参数说明

    • request:HTTP请求对象,通常是视图函数的第一个参数。
    • 'template_name.html':要渲染的模板文件的名称。
    • data:要传递给模板的数据,通常是一个字典,包含需要在模板中显示的变量和数值。
  3. 模板渲染

    • 在模板中,你可以通过使用模板语言(Django模板引擎)来访问传递的数据,并将其动态显示在页面上。
    • 例如,在模板中使用{{ key }}来显示传递的数据值。
  4. 返回响应

    • 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,否则将被重定向到另一个URLredirect函数接受一个URL作为参数,并返回一个HttpResponseRedirect对象,将用户重定向到指定的URL。

三、Django便捷函数

想要深入了解的可以点击官方链接

在Django中,便捷函数(shortcut functions)是一组简单而方便的函数,用于执行常见的任务,如渲染模板、重定向用户、返回JSON响应等。这些函数位于django.shortcuts模块中,并提供了一种简洁的方式来处理常见的任务,而无需编写大量的代码。

以下是一些常用的Django便捷函数的详细介绍:

  1. render函数:

    • 功能:将数据渲染到指定的模板中,并返回一个包含渲染内容的HttpResponse对象。
    • 用法:通常用于将动态内容呈现给用户,例如将数据库中的数据传递给模板进行渲染。
    • 示例
      from django.shortcuts import render
      
      def my_view(request):
          context = {'name': 'Alice', 'age': 30}
          return render(request, 'my_template.html', context)
      
  2. redirect函数:

    • 功能:将用户重定向到指定的URL。
    • 用法:常用于处理表单提交后的重定向或其他页面跳转需求。
    • 示例
      from django.shortcuts import redirect
      
      def my_view(request):
          # some logic here
          return redirect('/new_url/')
      
  3. 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})
      
  4. 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")
      
  5. 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页面。

标签:函数,render,三板斧,request,Django,之小白,HttpResponse,模板
From: https://www.cnblogs.com/xiao01/p/18102759

相关文章

  • Django框架之静态文件
    一、静态文件配置说明1、HTML文件我们将html文件默认都放在templates文件夹下,2、资源文件将网站所使用的静态文件默认都放在static文件夹下前端已经写好了的,能够直接调用使用的文件。比如:网站写好的js文件网站写好的css文件网站用到的图片文件第三......
  • Django框架之request对象
    一、request对象1、简介服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API。ps:get请求携带的数据是有大小限制的,大......
  • Django框架之Django的安装与使用
    首先我们需要先确定好自己电脑上的python解释器环境,否则会导致后面项目所需要的库安装不了以及项目无法运行的问题。一、Django框架下载要下载Django并开始使用它,你可以按照以下步骤进行:1、安装Python首先,确保你的计算机上已经安装了Python。你可以从Python官方网站下载最......
  • django小白必会
    Django基础1.Django小白必会三板斧1.1HttpResponse返回纯文本或者JSON数据fromdjango.shortcutsimportrender,HttpResponsedefindex(request):print(request)#HttpResponse:返回纯文本或者JSON数据returnHttpResponse("ok")1.2render渲染前端......
  • Ajax和django自带序列化组件
    Ajax和django自带序列化组件1.Ajax1.1Ajax介绍AJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法......
  • Django之图形验证码
    【1】生成图片验证码依赖于pillow模块pipinstallpillow使用pillow模块在导入时使用importPIL,而不是pillow【1.1】Pillow图像生成模块fromPILimportImage,ImageDraw,ImageFont#Image:生成图片对象#ImageDraw:生成画笔对象#ImageFont:控制字体样式#图......
  • Django框架之python后端框架介绍
    一、网络框架及MVC、MTV模型1、网络框架网络框架(Webframework)是一种软件框架,用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具,以简化开发过程并提高开发效率。网络框架通常包括以下功能和特点:路由处理(Routing):网络框架定义了URL与处理程序......
  • mysql 主从复制 -- django发送钉钉通知
    mysql主从搭建#之前做过redis的主从,很简单#mysql稍微复杂一些,搭建mysql主从的目的是?-读写分离-单个实例并发量低,提高并发量-只在主库写,读数据都去从库#原理MySQL服务器之间的主从同步是基于二进制日志机制(binlog),主服务器使用二进制日志来(bi......
  • 【附源码】django计算机毕业设计web的学生作业管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化、数字化的教育环境中,学生作业管理已成为教学过程中不可或缺的一部分。传统的作业管理方式,如纸质作业本、电子邮件提交等,存在着效率低下、资源......
  • 【附源码】django计算机毕业设计病房管理系统设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在现代医疗体系中,病房管理是医院运营的重要组成部分。随着科技的不断进步和信息化水平的提高,传统的手工或半自动化的病房管理模式已经无法满足现代医疗服务......