编写你的第一个 Django 应用程序,第8部分

Posted xh2023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写你的第一个 Django 应用程序,第8部分相关的知识,希望对你有一定的参考价值。

Django

本教程从教程 7 停止的地方开始。我们已经构建了我们的网络投票应用程序,现在将查看第三方软件包。

Django 的优势之一是丰富的第三方软件包生态系统。它们是社区开发的包,可用于快速改进应用程序的功能集。

本教程将展示如何添加 Django 调试工具栏,一个常用的第三方包。近年来,Django 调试工具栏在 Django 开发者调查中排名前三。

1、安装 Django 调试工具栏

Django 调试工具栏是调试 Django Web 应用程序的有用工具。这是一个由Jazzband组织维护的第三方软件包。

工具栏可帮助您了解应用程序的运行方式并识别问题。它通过提供提供有关当前请求和响应的调试信息的面板来实现此目的。

要安装第三方应用程序(如工具栏),您需要通过在激活的虚拟环境中运行以下命令来安装包。这类似于我们之前安装的步骤 Django .

$ python -m pip install django-debug-toolbar

与 Django 集成的第三方软件包需要一些安装后设置才能将它们与您的项目集成。

通常,您需要将包的 Django 应用程序添加到您的 INSTALLED_APPS 设置中。某些软件包需要其他更改,例如添加到 URLconf ( urls.py )。

Django 调试工具栏需要几个设置步骤。按照它们进行操作 安装指南 .这些步骤在本教程中没有重复,因为作为第三方包,它可能会单独更改为 Django 的时间表。

安装后,当您刷新投票应用程序时,您应该能够在浏览器窗口的右侧看到 DjDT“句柄”。

单击它以打开调试工具栏并使用每个面板中的工具。有关面板显示内容的更多信息,请参阅面板文档页面。

2、从他人那里获得帮助

在某些时候,您会遇到问题,例如工具栏可能无法呈现。发生这种情况并且您无法自行解决问题时,您可以使用一些选项。

  1. 如果问题与特定包有关,请检查包文档中是否有常见问题解答的故障排除。例如,Django 调试工具栏有一个提示部分,概述了故障排除选项。
  2. 在包的问题跟踪器上搜索类似问题。Django 调试工具栏在 GitHub 上。
  3. 咨询 Django 论坛 Django Forum. .
  4. 加入 Django Discord server. .
  5. 加入 Libera.chat 上的 #Django IRC 频道 Libera.chat.

3、安装其他第三方软件包

还有更多的第三方软件包,您可以使用出色的 Django 资源找到它们, Django 包 .Django Packages.

可能很难知道您应该使用哪些第三方软件包。这取决于您的需求和目标。有时,使用处于 alpha 状态的包是可以的。

其他时候,您需要知道它已准备好生产。 亚当·约翰逊(Adam Johnson)有一篇博客文章,概述了一组特征,这些特征使软件包有资格“维护良好”。

Django 包显示其中一些特征的数据,例如包上次更新的时间。

正如亚当在他的帖子中指出的那样,当其中一个问题的答案是“否”时,这是一个做出贡献的机会。

4、下一步是什么?

初学者教程到此结束。与此同时,您可能想查看一些关于从哪里开始的指向这里 .

如果您熟悉 Python 打包并有兴趣学习如何将民意调查转换为“可重用应用程序”,请查看高级教程:如何编写可重用的应用程序。

Advanced tutorial: How to write reusable apps.

 

-------------------------------------------end--------------------------------------------------

 

 

编写你的第一个Django应用程序,第四部分

本教程从随笔三停止的地方开始。这里将重点放简单的表单处理和削减我们的代码。

写一个简单的表单

更新模版文件polls/detail.html,以便包含一个html<form>元素:

<body>
    <h1>{{ question.question_text }}</h1>
    {% if error_message %}<p><strong>{{ error_message }}</strong>></p>>{% endif %}
    <form action="{% url ‘polls:vote‘ question.id %}" method="post">
    {% csrf_token %}
    {% for choice in question.choice_set.all %}
        <input type="radio" name="choice" id="choice{{ forloop.counter}}" value="{{ choice.id}}">
        <label for ="choice{{ forloop.counter}}">{{ choice.choice_text }}</label><br />
    {% endfor %}
    <input type="submit" value="Vote">
    </form>
</body>

说明:

  • 上面的模版为每个问题选项显示一个单选按钮。value按钮相关联的是问题的选择的ID。name为每个单选按钮的choice。这意味着,当有人选择其中一个单选按钮并提交表单时,它将发送post数据choice=#,#表示所选选项的id。
  • forloop.counter表示for标签经过其循环的次数
  • 由于我们正在创建POST表单(可能会影响其循环的次数)。简而言之,所有以内部URL为目标的POST表单都应使用模版标记:{% csrf_token %}

表单写完,就创建一个处理提交数据的django视图。并对其进行处理。

打开polls/views.py文件编写代码:

from django.urls import reverse

def vote(request,question_id):
    question=get_object_or_404(Question,pk=question_id)
    try:
        selected_choice=question.choice_set.get(pk=request.POST[choice])
    except(KeyError,Choice.DoesNotExist):
        return render(request,polls/detail,{
        question:question,
        error_message:"You didn‘t select a choice.",
    })
    else:
        selected_choice.votes+=1
        selected_choice.save()
        return HttpResponse(reverse(polls:results,args=(question_id)))

 

这段代码包含本教程尚未涉及的一些内容:

  • request.POST是一个类似字典的对象,可以通过key访问提交的数据。request.POST[‘choice‘]以字符串形式返回所选项的ID。
  • 如果request.POST[‘choice‘] KeyError,在POST数据中没有提供。将会引发error。上面的代码会检查并重新显示问题并显示错误消息。You didn‘t select a choice.
  • 增加了一个票数选择计数,代码将返回一个HttpResponseRedirect。而不是一个正常的response。HttpResponseRedirect只有一个参数:用户将被重定向到URL。
  • reverse()调用将返回一个类似的字符串:‘/polls/3/results/‘。这个将重定向的URL会调用‘results’视图显示最终结果。

技术分享图片

当人在问题中投票后,该vote()视图将到results页面。我们来写下这个观点:

polls/views.py:

def results(request,question_id):
    question=get_object_or_404(Question,pk=question_id)
    return render(request,polls/results.html,{question:question})

 

可以看出,这和detail视图几乎一样。等下解决此冗余。

再去模版目录下创建:polls/results.html

<body>
    <h1>{{ question.question_text }}</h1>
    <ul>
        {% for choice in question.choice_set.all %}
        <li>
            {{ choice.choice_text }} -- {{ choice.votes }}
            票
        </li>
        {% endfor %}
    </ul>
    <a href="{% url ‘polls:detail‘ question.id %}">继续投票?</a>
</body>
</html>

 

现在,可以进行投票了。输入127.0.0.1/polls 然后一直点击下去。

技术分享图片

使用通用视图

之前有提到两个视图代码几乎一样。冗余的,django提供了一个称为‘通用视图‘系统的快捷方式。

将会:

  1. 转换URLconf
  2. 删除一些旧的不需要的视图
  3. 基于django的通用视图引入新的视图

 修改URL配置

首先打开polls/urls.py更改代码:

 

以上是关于编写你的第一个 Django 应用程序,第8部分的主要内容,如果未能解决你的问题,请参考以下文章

Django L2 编写你的第一个Django应用,第2部分¶

编写你的第一个 Django 应用程序,第4部分

编写你的第一个 Django 应用程序,第6部分

编写你的第一个Django应用程序,第四部分

编写你的第一个 Django 应用半成品

编写你的第一个Django应用程序