Django 设计一个不使用账户的 Django 投票系统
在本文中,我们将介绍如何设计一个使用 Django 开发的投票系统,该系统不需要用户账户进行投票。
阅读更多:Django 教程
介绍
Django 是一个流行的 Web 应用程序框架,它提供了一套强大而灵活的工具,可用于构建各种类型的应用程序。在本文中,我们将使用 Django 构建一个简单的投票系统,该系统不需要用户账户。
设计思路
为了设计一个不使用账户的投票系统,我们可以利用 Django 提供的 session
功能。session
是一种在服务器端存储用户相关数据的机制,它可以通过在用户的浏览器上设置一个唯一标识符来跟踪用户的会话状态。
构建投票模型
首先,我们需要定义一个投票模型来存储投票的相关信息。在 Django 中,我们可以使用模型类来表示数据库中的表。下面是一个简单的投票模型的示例:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question
class Choice(models.Model):
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
上述代码中,我们定义了 Poll
和 Choice
两个模型类。Poll
表示一个投票问题,它包含问题内容和发布日期。Choice
表示问题的选项,它与 Poll
之间通过外键关联。
创建路由和视图
接下来,我们需要创建相关的路由和视图来处理投票系统的功能。在 Django 中,路由负责将 URL 映射到相应的视图函数上,而视图函数则负责处理用户请求并返回相应的响应。
首先,我们需要创建用于显示投票问题和选项的视图。在 views.py
文件中,我们可以编写以下代码:
from django.shortcuts import render, get_object_or_404
from .models import Poll
def poll_list(request):
polls = Poll.objects.all()
return render(request, 'polls/poll_list.html', {'polls': polls})
def poll_detail(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
return render(request, 'polls/poll_detail.html', {'poll': poll})
上述代码中,poll_list
视图函数用于显示所有的投票问题列表,poll_detail
视图函数用于显示特定投票问题的详细信息。
接下来,我们需要创建投票功能的视图函数。在 views.py
文件中,我们可以编写以下代码:
from django.shortcuts import render, get_object_or_404, redirect
from .models import Poll
def vote(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
selected_choice = poll.choice_set.get(pk=request.POST['choice'])
selected_choice.votes += 1
selected_choice.save()
return redirect('poll_detail', poll_id=poll.id)
上述代码中,vote
视图函数用于处理用户的投票请求。它首先从数据库中获取投票问题和用户选择的选项,然后将选项的投票数加一,并保存到数据库中。
创建模板文件
为了将数据呈现给用户,我们需要创建相应的 HTML 模板文件。在 Django 中,模板文件负责将数据与视图结合,生成最终的 HTML 页面。
首先,我们需要创建用于显示投票问题列表的模板文件 poll_list.html
,其中包含以下代码:
{% for poll in polls %}
<h3><a href="{% url 'poll_detail' poll_id=poll.id %}">{{ poll.question }}</a></h3>
{% empty %}
<p>No polls available.</p>
{% endfor %}
上述代码中,我们使用了 Django 的模板语法来展示投票问题的列表。
接下来,我们需要创建用于显示投票问题详情的模板文件 poll_detail.html
,其中包含以下代码:
<h3>{{ poll.question }}</h3>
{% for choice in poll.choice_set.all %}
<input type="radio" name="choice" id="choice_{{ choice.id }}" value="{{ choice.id }}">
<label for="choice_{{ choice.id }}">{{ choice.choice_text }}</label><br>
{% endfor %}
<button type="submit">Vote</button>
上述代码中,我们展示了投票问题的详情,并为每个选项提供了单选按钮。用户选择一个选项后,可以点击 “Vote” 按钮进行投票。
更新路由
为了能够访问投票系统的各个功能,我们需要更新项目的路由配置。在 urls.py
文件中,我们可以编写以下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.poll_list, name='poll_list'),
path('poll/<int:poll_id>/', views.poll_detail, name='poll_detail'),
path('poll/<int:poll_id>/vote/', views.vote, name='vote'),
]
上述代码中,我们定义了三个路由规则,分别对应了投票问题列表、投票问题详情和投票功能的 URL。
运行测试
现在,我们可以启动 Django 开发服务器,并在浏览器中访问投票系统。通过在终端中运行 python manage.py runserver
命令,我们可以启动服务器。然后,在浏览器中访问 http://localhost:8000/
,即可看到投票问题列表页面。
点击其中一个投票问题的链接,可以查看该问题的详情页面,并可以选择一个选项进行投票。
总结
在本文中,我们介绍了如何设计一个不使用账户的 Django 投票系统。通过使用 Django 的 session
功能,我们可以跟踪用户的会话状态。通过模型、视图和模板的组合,我们可以实现投票功能并将结果展示给用户。希望本文对你理解如何在 Django 中构建投票系统有所帮助。