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 Question(models.Model):
question_text =models.CharField(max_length=200,verbose_name=u"问题内容")
pub_date = models.DateTimeField(verbose_name=u"发表时间")

class Meta:
verbose_name = "问题"
verbose_name_plural = verbose_name
def __str__(self):
return self.question_text

class Choice(models.Model):
question = models.ForeignKey(Question,verbose_name=u"问题内容")
choice_text = models.CharField(max_length=200,verbose_name=u"选项内容")
votes = models.IntegerField(default=0,verbose_name=u"投票")

class Meta:
verbose_name = "选择"
verbose_name_plural = verbose_name
def __str__(self):
return self.choice_text

然后通过命令python manage.py makemigrations python manage.py migrate进行迁移
我们也可以通过python manage.py sqlmigrate查看迁移过程中执行的原始sql语句

BEGIN;
--
-- Create model Choice
--
CREATE TABLE `polls_choice` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `polls_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE `polls_choice` ADD COLUMN `question_id` integer NOT NULL;
ALTER TABLE `polls_choice` ALTER COLUMN `question_id` DROP DEFAULT;
CREATE INDEX `polls_choice_7aa0f6ee` ON `polls_choice` (`question_id`);
ALTER TABLE `polls_choice` ADD CONSTRAINT `polls_choice_question_id_c5b4b260_fk_polls_question_id` FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`);
COMMIT;
Following files were affected

请注意几点:
1:表名是自动生成的,由app的名字(polls)和模型名字的小写字母组合而成 —— question和choice
2:主键(id)是自动添加的。(你也可以重写这个行为。)
3:按照惯例,Django会在外键的字段名后面添加 "_id"。(是的,你依然可以重写这个行为。)

第二部分:使用xadmin搭建后台系统
在polls中新建adminx.py文件

import xadmin
from xadmin import views
from xadmin.plugins.auth import UserAdmin

from .models import Question,Choice

class ChoiceInline(object):
model = Choice
extra = 0

class QuestionAdmin(object):
list_display = [‘question_text‘, ‘pub_date‘] #自定义显示这两个字段
search_fields = [‘question_text‘, ‘pub_date‘] #可以搜索的字段
list_filter = [‘question_text‘, ‘pub_date‘]
ordering = [‘-pub_date‘,] ##按照倒序排列
inlines = [ChoiceInline]
xadmin.site.register(Question,QuestionAdmin) #向Xadmin注册Question

图1:管理系统图

图2:问题与选项图

在图1中,后台系统中显示了投票问题,包括问题内容和发表时间。右上角可以新增内容,上面还有搜索框和过滤器

在图2中,在每个问题中可以选择选项内容

第三部分:视图和模板

from django.shortcuts import render
from django.http import HttpResponse,Http404
from .models import Question,Choice
# Create your views here.

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views import generic

from .models import Choice, Question

class IndexView(generic.ListView):
template_name = ‘polls/index.html‘
context_object_name = ‘latest_question_list‘

def get_queryset(self):
"""Return the last five published questions."""
return Question.objects.order_by(‘-pub_date‘)[:5] #按照时间从小到大排序,取前5个

class DetailView(generic.DetailView):
model = Question
template_name = ‘polls/detail.html‘

class ResultsView(generic.DetailView):
model = Question
template_name = ‘polls/results.html‘

def vote(request, question_id):
p = get_object_or_404(Question, pk=question_id)
try:
selected_choice = p.choice_set.get(pk=request.POST[‘choice‘])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, ‘polls/detail.html‘, {
‘question‘: p,
‘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=(p.id,)))

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

第四部分:表单

表单内容不再赘述,可以查看文章最上面连接,第四部分有讲述

结果展示:

图3:投票问题

图4:问题选项

图5:投票结果

时间: 2024-10-08 02:16:56

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

基于Django快速开发可定制的办公系统实战(1):Git的使用

基于Django快速开发可定制的办公系统实战(1):Git的使用 ?为什么在项目的开篇要介绍下git的使用呢?俗话说:"工欲善其事,必先利其器",git工具就是项目开发的必备利器,尤其是在多人协作开发环境中.使用git工具可实现分布式的版本控制,可在服务端和本地创建一个版本库. ?脑图是本文的"脊椎",了解个大概后,再通读本文,再加上实际的操作,效果会更好,那我们就开始吧! 1 Git工具安装 Windows版本安装: 安装包下载地址:https://gitforw

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

开个博客记录django快速开发平台的开发进度

是的,我来重复的造个轮子! 造这个轮子是因为我没有找到合适的.使用django开发的快速开发平台. 今天开始尝试自己写一个快速开发平台的框架,将来开发业务系统时应该会用得上. So, 开个贴子纪念一下! 为什么要造轮子 django自带了admin后台可以快速的对model进行CRUD操作,而我呢由于严重的惰性使然, 不想再重新做一整套对model进行CRUD操作的界面了,虽然还有很多第三方库可以使用,但总觉得不适合国情(也或许是我没有找到,欢迎大家推荐),所以我的想法是直接在django ad

三、利用EnterpriseFrameWork快速开发Winform系统(C/S)

上一章讲解了开发Web系统的详细步骤,以书籍的管理作实例实现对书籍的增.删.改.查功能,本章接着上面的实例继续补充用Winform界面来实现此功能: 界面效果如下: 解决方案目录结构:     上图红色部分为这次新增加的文件,开发步骤: 1)新增Winform控制器,bookwinController.cs 2)新增界面接口,IfrmBook.cs 3)新增界面窗口,frmBookManager.cs 其中实体Book.cs和Dao在上一章实例中已经完成,所以直接调用就行了: bookwinCo

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这个应用添加进去 INSTA

【第一天】django快速开发——环境部署、表单、数据库操作、模板、文件学习

安装django 1.安装 setuptools yum install python-setuptools 2.完成之后,就可以使用 easy_install 命令安装 django easy_install django 注意:django对于pip和setuptools的版本有严格要求,如果不想那么麻烦建议直接装个python3.6 django管理命令 django-admin.py 这是django的管理命令,无论在哪个目录都可以用这个命令来对project或app做操作 最常用的命令

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

回<[开源]EnterpriseFrameWork框架系列文章索引> 本章内容与上一张<利用EnterpriseFrameWork快速开发Winform系统(C/S)>关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模

用python+django+twistd 开发一个属于自己的运维系统

开源的运维系统不少,比如nagios.zabbix.cati等等,但是遇到自己个性化的运维需求的时候,总是显的力不从心!最近在学习python,所以就考虑用python+django+twisted来定做一个完全个性化的运维系统. 运维系统有几个主要的功能:监控.分析.报警.更甚者直接根据分析的结果进行反应操作.而以上几点通过上述的框架可以比较容易的实现. 下面上图说明: 使用freemind整理了下思路: 下面是一些代码段,完整的代码下载见文档底部: Server: #!/usr/bin/en

HFun.快速开发平台(三)=》通用系统用户选择

系统中用户的选择使用特别多,将该功能统一实现可提升系统效率. 用户的选择实现相对简单,系统中基本都会提供,HFun.快速开发平台中的实现特点主要有: 1.用户的选择分为单用户选择和多用户选择. 2.用户的选择可通过部门进行筛选. 3.可通过用户名进行筛选. 4.提供Url传递默认选中项处理 5.提供全选.反选.取消选择操作. 6.提供回调方法供引用程序自定义数据处理. 7.数据加载.查询筛选使用jquery框架实现. 系统界面如下: 1.单人选择: 2.多人选择: