Django 开发投票系统

主要参考官方文档

Windows  10

Python 23.5

Django 1.9

1.创建项目(mysite)与应用(polls

D:\python>django-admin.py startproject mysite

D:\python>cd mysite

D:\python\mysite>python manage.py startapp polls

创建app后将app加入到setting中,打开mysite/setting.py,将polls这个应用添加进去

INSTALLED_APPS = [
    ‘polls.apps.PollsConfig‘,

    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
]

2.创建模型

打开polls/models.py

import datetime
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone

# Create your models here.
# 问题
@python_2_unicode_compatible
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(‘date published‘)

    def was_published_recently(self):
        now = timezone.now()
        return timezone.now()-datetime.timedelta(days=1) <= self.pub_date <= now

    was_published_recently.admin_order_field = ‘pub_date‘
    was_published_recently.boolean = True
    was_published_recently.short_description = ‘Published recently?‘

    def __str__(self):
        return self.question_text

# 选择
@python_2_unicode_compatible
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete = models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

运行命令:python manage.py makemigrations 和python manage.py migrate全数据库生成相应的表

3.后台管理

打开polls/admin.py,

from django.contrib import admin
from .models import Question, Choice

# Register your models here.

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {‘fields‘: [‘question_text‘]}),
        (‘Date information‘, {‘fields‘: [‘pub_date‘]}),
    ]
    inlines = [ChoiceInline]

    list_filter = [‘pub_date‘]
    list_display = (‘question_text‘, ‘pub_date‘, ‘was_published_recently‘)
    search_fields = [‘question_text‘]

admin.site.register(Question, QuestionAdmin)

4.编写视图函数(展示)

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, Http404
from .models import Question, Choice
from django.core.urlresolvers import reverse
from django.views import generic
from django.utils import timezone

# Create your views here.

# 展示所有问题
class IndexView(generic.ListView):
    template_name = ‘polls/index.html‘
    context_object_name = ‘latest_question_list‘

    def get_queryset(self):
        #return the last five published question
        return Question.objects.filter(pub_date__lte = timezone.now()).order_by(‘-pub_date‘)[:5]

# 查看问题详情
class DetailView(generic.DetailView):
    model = Question
    template_name = ‘polls/detail.html‘

    def get_queryset(self):
        """
        Excludes any questions that aren‘t published yet.
        """
        return Question.objects.filter(pub_date__lte=timezone.now())
# 查看结果
class ResultsView(generic.DeleteView):
    model = Question
    template_name = ‘polls/detail.html‘

# 投票
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):
    # Redisplay the question voting form.
        return render(request, ‘polls/detail.html‘, {‘question‘: question, ‘error_message‘: "You didn‘t select a choice.",})
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
    return HttpResponseRedirect(reverse(‘polls:results‘, args=(question.id,)))

5.模板

视图函数处理的结果通过模板展示出来

detail.html

<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>

index.html

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

results.html

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>
<a href="{% url ‘polls:detail‘ question.id %}">Vote again?</a>

6.url分发

不同的url在这里进行分发到不同的函数处理

mysite/urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r‘^polls/‘, include(‘polls.urls‘)),
    url(r‘^admin/‘, admin.site.urls),
]

再次分发

polls/urls.py

#coding:utf-8
#!/usr/bin/env python

from django.conf.urls import url
from . import views

app_name = ‘polls‘
urlpatterns = [
               # ex: /polls/
               url(r‘^$‘, views.IndexView.as_view(), name=‘index‘),
               # ex: /polls/5/
               url(r‘^(?P<pk>[0-9]+)/$‘, views.DetailView.as_view(), name=‘detail‘),
               # /polls/5/results/
               url(r‘^(?P<pk>[0-9]+)/results/$‘, views.ResultsView.as_view(), name=‘results‘),
               # /polls/5/vote/
               url(r‘^(?P<question_id>[0-9]+)/vote/$‘, views.vote, name=‘vote‘),
               ]

输入命令python manage.py runserver,运行系统

登陆后:

不登陆,可以查看到相应的问题,选中相应的小圆点,点击vote可进行投票。

时间: 2024-10-26 21:55:54

Django 开发投票系统的相关文章

Django快速开发投票系统

使用Django搭建简单的投票系统:这个是官网的教程:https://docs.djangoproject.com/en/2.0/intro/tutorial01/ 在Run manage.py Task中新建app:startapp polls为了管理方便,我们新建apps文件夹,并将polls文件夹拖到apps中第1部分:构建模型新建polls的model from django.db import models # Create your models here. class Questi

Django快速开发之投票系统

参考官网文档,创建投票系统. ================ Windows  7/10 Python 3.6 Django 2.0* ================ 1.创建项目(mysite)与应用(polls) D:\pydj>django-admin.py startproject mysite D:\pydj>cd mysite D:\pydj\mysite>python manage.py startapp polls 添加到setting.py # Applicatio

微信投票系统 开发

公众号发起投票,无疑是吸粉涨粉的一项大杀器,各类萌宝投票,最美投票总是火爆朋友圈,组织方公众号的粉丝也是噌噌向上涨. 本文一步一步向您介绍开发公众号投票系统的详细过程,并在最后给出DEMO以供参考 ,为免广告嫌疑,本文能不贴图的都不贴图了,见谅. 公众号投票系统的原理并不复杂,用户发布或者管理员后台发布待投票的项目,手机端用户在微信上浏览H5页面,进行投票. 这其中几个关键点在于: 1.微信端用户鉴权识别用户身份,以防刷票. 2.发布投票项目时,使用微信 JS SDK 进行图片的上传. 3.后台

Django开发的简单CMDB系统(仅供参考)

自己基于django开发的一个简单机房机柜CMDB系统,仅供参考.欢迎在下面留言,提出修改意见. 可实现增删改查. 权限未做,很多功能都没做,只做一个最基本的,初学. 前端模板用的inspinia2.5,和jumpserver用的一样的模块,所以看着差不多.模板可自行百度搜索. 放到pycharm或者linux环境下,配置好,运行就可以. domo 登录:http://42.62.6.54:8001/index.html  ,默认用户名hequan,密码123456. 下载链接:http://p

以太坊开发完整去中心化应用 —— 区块链投票系统

第一节 课程概述 本课程面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. ethereum logo 通过本课程的学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成本课程,最好对以下技术已经有一些基本了解

Python Django 集成Redis Sentinel(哨兵)集群开发秒杀系统

我们知道秒杀系统最大特点是瞬时高并发.高访问量的系统.我们还要保证它的高可用性.这里我们采用Python Django 集成Redis Sentinel(哨兵)集群开发秒杀系统. Redis Sentinel(哨兵)集群Redis哨兵为Redis集群提供了高可用性.实际上这意味着我们可以使用哨兵模式创建一个可以不用人为干预而应对各种故障的Redis集群部署.可大大提高系统的高可用性. 哨兵模式还提供了其他的附加功能,如监控,通知,为客户端提供配置. 下面是在宏观层面上哨兵模式的功能列表: 监控:

以太坊 DApp 开发入门实战! 用Node.js和truffle框架搭建——区块链投票系统!

第一节 概述 面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. 通过学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ru

【免费下载】全套最新 04区块链投票系统 视频教程+教学资料+学习课件+源代码+软件开发工具

04区块链投票系统视频教程 网盘地址: 链接:https://pan.baidu.com/s/10f26Ev\_PA3X\_grQmasd1ww 提取码:6uer 加公众号 获取更多新教程 教程目录大纲 ./04区块链投票系统 ├── 视频 │?? ├── 投票系统 (10).avi │?? ├── 投票系统 (11).avi │?? ├── 投票系统 (12).avi │?? ├── 投票系统 (13).avi │?? ├── 投票系统 (14).avi │?? ├── 投票系统 (15).a

Django开发环境搭建

Django 项目是一个定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来.Django 框架的核心组件有:用于创建模型的对象关系映射,为最终用户设计的完美管理界面,一流的 URL 设计,设计者友好的模板语言,缓存系统等. 为了搭建Django开发环境,先去Django官网看看.在Dlownload目录下告诉了用户怎么获取Django. How to get Django Django is available open-source under the BSD