django 投票小项目

创建一个mysite项目

django-admin startproject mysite

创建一个polls应用

django-admin startapp polls

mkdir polls/templates/ 创建模板文件夹

polls.views.py 内容如下

from django.shortcuts import get_object_or_404, render
from django.core.urlresolvers import reverse
from django.views import generic
# 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 questions."""
        return Question.objects.order_by(‘-pub_date‘)[: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()
    return HttpResponseRedirect(reverse(‘polls:results‘, args=(p.id,)))

以上采用的是generic View的方法,还可以用下面的方法

from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from polls.models import Question,Choice
from django.template import RequestContext ,loader
from django.shortcuts import get_object_or_404, render
from django.core.urlresolvers import reverse
# Create your views here.

def detail(request, question_id):
    text = Question.objects.filter(pk=question_id)
    #return HttpResponse("You‘re looking at question %s." % question_id)
    #return HttpResponse(text)
    question = get_object_or_404(Question, pk=question_id)
    return render(request, ‘polls/detail.html‘, {‘question‘: question})

def results(request, question_id):

    #response = "You‘re looking at the results of question %s."
    #return HttpResponse(response % question_id)
    question = get_object_or_404(Question, pk=question_id)
    return render(request, ‘polls/results.html‘, {‘question‘: question})

def vote(request, question_id):
    #return HttpResponse("You‘re voting on question %s." % 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()
    return HttpResponseRedirect(reverse(‘polls:results‘, args=(p.id,)))

def index(request):
    latest_question_list = Question.objects.order_by(‘-pub_date‘)[:5]
    context = {‘latest_question_list‘:latest_question_list}
    return render(request,‘polls/index.html‘,context)
                                                                                                   40,1-4       底端

app02/models.py

from django.db import models
from django.utils import timezone
import datetime
from django.contrib.contenttypes.fields import GenericForeignKey
# Create your models here.
class  Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(‘date published‘)

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1) #判断是否是最近发布的
    was_published_recently.admin_order_field = ‘pub_date‘  #用pub_date字段排序
    was_published_recently.boolean = True   #如果是最近发布的就会显示一个标志出来
    was_published_recently.short_description = ‘Published recently?‘  #描述

class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

app02/urls.py

from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns(‘‘,
        url(r‘^$‘, views.IndexView.as_view(), name=‘index‘),
        url(r‘^(?P<pk>\d+)/$‘, views.DetailView.as_view(), name=‘detail‘),
        url(r‘^(?P<pk>\d+)/results/$‘, views.ResultsView.as_view(), name=‘results‘),
        url(r‘^(?P<question_id>\d+)/vote/$‘, views.vote, name=‘vote‘),

        )

还有另一种方法

from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns(‘‘,
        # ex: /polls/
        #url(r‘^$‘, views.index, name=‘index‘),
        # ex: /polls/5/
        url(r‘^(?P<question_id>\d+)/$‘, views.detail, name=‘detail‘),
        # ex: /polls/5/results/
        url(r‘^(?P<question_id>\d+)/results/$‘, views.results, name=‘results‘),
        # ex: /polls/5/vote/
        url(r‘^(?P<question_id>\d+)/vote/$‘, views.vote, name=‘vote‘),
        (r‘^pl/$‘, ‘polls.views.index‘),
        )
                                                                                                                                                                                                  
时间: 2024-10-25 12:38:15

django 投票小项目的相关文章

python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)

''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_name -grades (多对多 关联班级表) ''' 在写小项目之前我们先复习一下小知识: 1. form表单提交数据的注意事项: 是form不是from,必须要有method和action 所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有name属性 form表单必须要有su

Java小项目之:投票系统

Java小项目之:投票系统今天给大家带来的是java编写的投票小系统,代码简易,适合初学者练手!代码展示:package com.tarena.wgh.servlet; import java.io.IOException;import java.io.PrintWriter;import java.util.*; import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.serv

javascript投票功能项目全纪录

需求: 1.投票分为带图片投票与无图片投票两个投票UI 2.投票前与投票后会有UI不同 3.投票line会跟随投票num进行百分比的增长(with通过js计算) 需要技术: requires.js template ajax jsonp javascript 投票javascript解析: function Vote(o){ var me = this; me.voteWrap = o.voteWrap; me.votedWrap = o.votedWrap; me.submitBtn = nu

自学(系统学)Python了那么久, 想就业? 几个简单小项目让你通过面试!

本人从事Python开发多年,精通爬虫,web,熟悉其他方向,好多小伙伴私聊我说,我看了你的文章后,我学习了,但是对于项目这块还是不是很熟悉,如何快速掌握几个小项目,以及几个可以面试的项目.欢迎大家订阅公众号:Python从程序猿到程序员,,,或者骚扰本人.154725.1666,可以获得一次答疑机会. Python是一个比较完善的开发语言,既能做验证模型又能做落地项目,所以Python用来写大型项目是没有问题的.而且Python作为Web开发的三大传统解决方案之一,在Web开发领域也有很多经典

Android开发不得不看的11个实战小项目

是不是想学Android开发(http://www.maiziedu.com/course/android-px/)却不知道如何下手?懂得一点点入门基础知识却无法应用到实际开发中?看相关资料觉得都懂了实际动手却发现什么都不懂?本地搭建Android开发环境太麻烦? 如果你有以上的各种问题,那么今天小编推荐的Android开发的这11个小项目,你一定要看!! 因为,这些实战项目都是基于google 官方的API Demos制作而成,而且全部配有Android在线开发环境,你可以随时动手跟着课程操作

小学生四则运算小项目

我写这个小项目,是在一个小程序上改的,这个小项目的网址为http://www.cnblogs.com/ys1101/p/4368103.htm,在上面的代码上实现的功能不完整,并没有完成课本上的要求.在他的代码上我增加了语言选择,这里只是有英文和中文的选择.还有原来的代码并没有实现真分数的四则运算,在此基础上我在菜单栏上新添加了真分数的四则运算,还有对其菜单栏进行了优化,使得界面更好看.写好后我将此项目放入了我的Github上网址为:https://github.com/HAIWWH/WWH,希

IOS-小项目(饿了么 网络部分 简单实现)

在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是实打实的网络连接.看一下文件架构. 这一采用的是MVC设计模式,虽然文件很少,但是也可以看. 下面开始正式介绍小项目的实现. 首先介绍Model的实现,很简单,实现模型即可, Shop.h // // Shop.h // CX-小项目(饿了么 网络部分 简单实现) // // Created by

盘点三个网络赚零花钱的小项目,傻瓜式操作

今天,写一篇比较特别的日志,咱们来盘点三个赚零花钱的小项目,都是“傻瓜式”操作. 这几个小项目,虽说赚不了太多的钱,但是却是一个可以锻炼执行力的好方法. 每一个项目操作都非常的简单,边锻炼执行力,边收钱,也是一种不错的体验. 废话不多说,咱们直接进入主题啊! 一,支付宝借条,可赚零花钱,也可赚大钱 支付宝有打借条的功能,本来他们开发这个,只是针对于熟人之前借钱的. 不过,无心插柳柳成荫,没成想,这个功能火的一塌糊涂,完全带火了陌生人之间的借贷业务. 如何利用支付宝借条赚钱? 其实就跟放贷是一样的

傻瓜式操作的三个网络赚零花钱的小项目

今天,写一篇比较特别的日志,咱们来盘点三个赚零花钱的小项目,都是"傻瓜式"操作. 这几个小项目,虽说赚不了太多的钱,但是却是一个可以锻炼执行力的好方法. 每一个项目操作都非常的简单,边锻炼执行力,边收钱,也是一种不错的体验. 废话不多说,咱们直接进入主题啊! 一,支付宝借条,可赚零花钱,也可赚大钱 支付宝有打借条的功能,本来他们开发这个,只是针对于熟人之前借钱的. 不过,无心插柳柳成荫,没成想,这个功能火的一塌糊涂,完全带火了陌生人之间的借贷业务. 如何利用支付宝借条赚钱? 其实就跟放