日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使...

發(fā)布時(shí)間:2023/12/10 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(一)關(guān)于Django

Django是一個(gè)基于MVC構(gòu)造的框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式。

Ubuntu下的安裝:一般都自帶Python的。網(wǎng)上教程比較多了....

1

2

3

4

5

6

7

8

dizzy@dizzy-pc:~$ python

Python 2.7.3 (default, Apr 20 2012, 22:44:07)

[GCC 4.6.3] on linux2

Type"help","copyright","credits" or"license" for more information.

>>>import django

>>> help(django)

VERSION = (1, 6, 4,'final', 0)

#可以查看django版本等信息。

(二)第一個(gè)Django的app

#環(huán)境:Python2.7,Django1.6,Ubuntu12.04

Python 及 Django 安裝成功之后,就可以創(chuàng)建Django工程了

(1)教你開始寫Django1.6的第1個(gè)app

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#先創(chuàng)建一個(gè)文件夾

dizzy@dizzy-pc:~$mkdir Python

dizzy@dizzy-pc:~$cd Python

#然后創(chuàng)建工程

dizzy@dizzy-pc:~/Python$ django-admin.py startproject mysite

dizzy@dizzy-pc:~/Python$cd mysite

#然后這個(gè)工程就可以啟動(dòng)服務(wù)了

dizzy@dizzy-pc:~/Python/mysite$ python manage.py runserver

Validating models...

0 errors found

July 23, 2014 - 14:17:29

Django version 1.6.4, using settings'mysite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CONTROL-C.

#這樣,打開瀏覽器訪問: 便可看到: It Worked! 關(guān)閉服務(wù):ctrl+c

#新創(chuàng)建的項(xiàng)目里面會(huì)有:manage.py文件,mysite文件夾

#在mysite文件夾里面會(huì)有:__init__.py,settings.py,urls.py,wsgi.py四個(gè)文件

#__init__.py是一個(gè)空文件,

#setting.py 是項(xiàng)目的配置文件。需要修改兩個(gè)地方,這里使用默認(rèn)的SQLite3數(shù)據(jù)庫

LANGUAGE_CODE ='zh-cn' #原:en-us

TIME_ZONE ='Asia/Shanghai' #原:UTC

#配置完之后,便可以創(chuàng)建數(shù)據(jù)表了

dizzy@dizzy-pc:~/Python/mysite$ python manage.py syncdb

#創(chuàng)建是還要設(shè)置一個(gè)超級(jí)管理員,用于后臺(tái)登錄。

(2)教你開始寫Django1.6的第1個(gè)app

1

2

3

4

5

6

7

#創(chuàng)建一個(gè)用于投票的app。

#進(jìn)入mysite工程根目錄,創(chuàng)建app

dizzy@dizzy-pc:~/Python/mysite$ python manage.py startapp polls

dizzy@dizzy-pc:~/Python/mysite$ls polls

admin.py __init__.py models.py urls.py views.py

#這樣。Django已經(jīng)生成了,app通常所需的模板文件。

下面創(chuàng)建兩個(gè)models。Poll 和 Choice

1

dizzy@dizzy-pc:~/Python/mysite$ vim polls/models.py

修改文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

from django.dbimport models

# Create your models here.

from django.dbimport models

class Poll(models.Model):

question= models.CharField(max_length=200)

pub_date= models.DateTimeField('date published')

class Choice(models.Model):

poll= models.ForeignKey(Poll)

choice_text= models.CharField(max_length=200)

votes= models.IntegerField(default=0)

#基本創(chuàng)建model過程就是這樣,細(xì)節(jié)還要深入研究!

然后修改工程的配置文件setting.py,在INSTALLED_APP元組下面添加剛才創(chuàng)建的app:polls

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

dizzy@dizzy-pc:~/Python/mysite$ vim mysite/settings.py

INSTALLED_APPS= (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'polls',

)

#可以使用 python manage.py sql polls 查看app的建表SQL

#使用 python manage.py syncdb 進(jìn)行創(chuàng)建數(shù)據(jù)庫表

dizzy@dizzy-pc:~/Python/mysite$ ./manage.py sql polls

BEGIN;

CREATE TABLE"polls_poll" (

"id" integer NOT NULL PRIMARY KEY,

"question" varchar(200) NOT NULL,

"pub_date" datetime NOT NULL

)

;

CREATE TABLE"polls_choice" (

"id" integer NOT NULL PRIMARY KEY,

"poll_id" integer NOT NULL REFERENCES"polls_poll" ("id"),

"choice_text" varchar(200) NOT NULL,

"votes" integer NOT NULL

)

;

COMMIT;

#這樣就可以通過設(shè)置model讓Django自動(dòng)創(chuàng)建數(shù)據(jù)庫表了

要想在后臺(tái)admin中管理polls。還需要修改app下面的admin.py 文件。

from django.contribimport admin

# Register your models here.

from django.contribimport admin

from polls.modelsimport Choice,Poll

class ChoiceInLine(admin.StackedInline):

model= Choice

extra= 3

class PollAdmin(admin.ModelAdmin):

fieldsets= [

(None, {'fields':['question']}),

('Date information', {'fields':['pub_date'],'classes':['collapse']}),

]

inlines= [ChoiceInLine]

admin.site.register(Poll,PollAdmin)

#這部分代碼,大體能看懂,具體的規(guī)則還要稍后的仔細(xì)研究。

##這部分代碼,由于拼寫失誤,導(dǎo)致多處出錯(cuò)。細(xì)節(jié)決定成敗!!

這樣再重啟服務(wù),就能在后臺(tái)管理polls應(yīng)用了。

(3)視圖和控制器部分

前面已經(jīng)完成了model(M)的設(shè)置。剩下的只有view(V)和urls(C)了。Django的視圖部分,由views.py 和 templates完成。

在polls中,我們將創(chuàng)建4個(gè)視圖:

“index” 列表頁 – 顯示最新投票。

“detail” 投票頁 – 顯示一個(gè)投票的問題, 以及用戶可用于投票的表單。

“results” 結(jié)果頁 – 顯示一個(gè)投票的結(jié)果。

投票處理 – 對(duì)用戶提交一個(gè)投票表單后的處理。

現(xiàn)在修改 views.py 創(chuàng)建用于視圖的函數(shù)。

1

dizzy@dizzy-pc:~/Python/mysite$ vim polls/views.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

from django.shortcutsimport render,get_object_or_404

# Create your views here.

from django.httpimport HttpResponse

from polls.modelsimport Poll

def index(request):

latest_poll_list= Poll.objects.all().order_by('-pub_date')[:5]

context= {'latest_poll_list':latest_poll_list}

return render(request,'polls/index.html',context)

def detail(request,poll_id):

poll= get_object_or_404(Poll,pk=poll_id)

return render(request,'polls/detail.html',{'poll':poll})

def results(request,poll_id):

return HttpResponse("you're looking at the results of poll %s." % poll_id)

def vote(request,poll_id):

return HttpResponse("you're voting on poll %s." % poll_id)

#涉及Django的自帶函數(shù),不做深究。后面再做研究!

要想使試圖能被訪問,還要配置 urls.py 。mysite是整個(gè)網(wǎng)站的URLConf,但每個(gè)app可以有自己的URLConf,通過include的方式導(dǎo)入到根配置中即可。現(xiàn)在在polls下面新建 urls.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from django.conf.urlsimport patterns,url

from pollsimport views

urlpatterns= patterns('',

#ex:/polls/

url(r'^$',views.index,name='index'),

#ex:/polls/5/

url(r'^(?P\d+)/$',views.detail,name='detail'),

#ex:/polls/5/results/

url(r'^(?P\d+)/results/$',views.results,name='results'),

#ex:/polls/5/vote/

url(r'^(?P\d+)/vote/$',views.vote,name='vote'),

)

#url中,三個(gè)參數(shù)。正則的url,處理的函數(shù),以及名稱

#正則表達(dá)式!!!!!

然后在根 urls.py 文件中,include這個(gè)文件即可。

1

dizzy@dizzy-pc:~/Python/mysite$ vim mysite/urls.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from django.conf.urlsimport patterns, include, url

from django.contribimport admin

admin.autodiscover()

urlpatterns= patterns('',

# Examples:

# url(r'^$', 'mysite.views.home', name='home'),

# url(r'^blog/', include('blog.urls')),

url(r'^polls/', include('polls.urls',namespace="polls")),

url(r'^admin/', include(admin.site.urls)),

)

#有Example:兩種形式。因?yàn)槭窃M,所以開始有“ ‘', ”。

然后開始創(chuàng)建模板文件。在polls下,創(chuàng)建templates文件夾。下面有index.html, detail.html 兩個(gè)文件。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

{% if latest_poll_list %}

{% for poll in latest_poll_list %}

{{ poll.question }}

{% endfor %}

{% else %}

No polls are available.

{% endif %}

{{ poll.question }}

{% for choice in poll.choice_set.all %}

{{ choice.choice_text }}

{% endfor %}

(4)投票功能完善

上面只是簡(jiǎn)單的實(shí)現(xiàn)了視圖功能,并沒有真正的實(shí)現(xiàn)投票功能。接下來就是完善功能。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#修改模板文件

dizzy@dizzy-pc:~/Python/mysite$ vim polls/templates/polls/detail.html

#需要加入form表單

{{ poll.question }}

{% if error_message%}

{{ error_message }}

{% endif%}

{% csrf_token%}

{% for choicein poll.choice_set.all %}

{{ choice.choice_text }}

{% endfor%}

然后需要修改 views.py 中的 vote 處理函數(shù)。進(jìn)行post數(shù)據(jù)的接收與處理。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# 文件 polls/views.py

from django.shortcutsimport get_object_or_404, render

from django.httpimport HttpResponseRedirect, HttpResponse

from django.core.urlresolversimport reverse

from polls.modelsimport Choice, Poll

# ...

def vote(request, poll_id):

p= get_object_or_404(Poll, pk=poll_id)

try:

selected_choice= p.choice_set.get(pk=request.POST['choice'])

except (KeyError, Choice.DoesNotExist):

# Redisplay the poll voting form.

return render(request,'polls/detail.html', {

'poll': 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,)))

在投票成功之后,讓用戶瀏覽器重定向到結(jié)果 results.html 頁。

1

2

3

def results(request, poll_id):

poll= get_object_or_404(Poll, pk=poll_id)

return render(request,'polls/results.html', {'poll': poll})

然后就需要?jiǎng)?chuàng)建模板 results.html 。

1

2

3

4

5

6

7

8

9

10

11

{{ poll.question }}

{% for choice in poll.choice_set.all %}

{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}

{% endfor %}

Vote again?

至此,重啟服務(wù)就能看到單選按鈕,以及submit了。

總結(jié)

以上是生活随笔為你收集整理的用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。