以一个投票程序的实例来讲解Python的Django框架使用

(一)关于django

    Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。

    Ubuntu下的安装:一般都自带Python的。网上教程比较多了….

dizzy@dizzy-pc:~$ pythonPython 2.7.3 (default, Apr 20 2012, 22:44:07) [GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import django>>> help(django)VERSION = (1, 6, 4, 'final', 0)#可以查看django版本等信息。

登录后复制

(二)第一个Django的app

#环境:Python2.7,Django1.6,Ubuntu12.04
        Python 及 Django 安装成功之后,就可以创建Django工程了       

    (1)教你开始写Django1.6的第1个app

立即学习“Python免费学习笔记(深入)”;

#先创建一个文件夹dizzy@dizzy-pc:~$ mkdir Pythondizzy@dizzy-pc:~$ cd Python#然后创建工程dizzy@dizzy-pc:~/Python$ django-admin.py startproject mysitedizzy@dizzy-pc:~/Python$ cd mysite#然后这个工程就可以启动服务了dizzy@dizzy-pc:~/Python/mysite$ python manage.py runserverValidating models... 0 errors foundJuly 23, 2014 - 14:17:29Django 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! 关闭服务:ctrl+c #新创建的项目里面会有:manage.py文件,mysite文件夹#在mysite文件夹里面会有:__init__.py,settings.py,urls.py,wsgi.py四个文件 #__init__.py是一个空文件,#setting.py 是项目的配置文件。需要修改两个地方,这里使用默认的SQLite3数据库LANGUAGE_CODE = 'zh-cn' #原:en-usTIME_ZONE = 'Asia/Shanghai' #原:UTC #配置完之后,便可以创建数据表了dizzy@dizzy-pc:~/Python/mysite$ python manage.py syncdb#创建是还要设置一个超级管理员,用于后台登录。#设置完之后,开启服务,便可进入后台管理界面了:http://127.0.0.1:8000/admin/

登录后复制

    (2)教你开始写Django1.6的第1个app

#创建一个用于投票的app。#进入mysite工程根目录,创建appdizzy@dizzy-pc:~/Python/mysite$ python manage.py startapp pollsdizzy@dizzy-pc:~/Python/mysite$ ls pollsadmin.py  __init__.py  models.py urls.py  views.py #这样。Django已经生成了,app通常所需的模板文件。

登录后复制

        下面创建两个models。Poll 和 Choice

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

登录后复制

        修改文件如下:

from django.db import models # Create your models here. from django.db import 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)#基本创建model过程就是这样,细节还要深入研究!

登录后复制

        然后修改工程的配置文件setting.py,在INSTALLED_APP元组下面添加刚才创建的app:polls

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 进行创建数据库表dizzy@dizzy-pc:~/Python/mysite$ ./manage.py sql pollsBEGIN;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; #这样就可以通过设置model让Django自动创建数据库表了    要想在后台admin中管理polls。还需要修改app下面的admin.py 文件。from django.contrib import admin # Register your models here. from django.contrib import adminfrom polls.models import 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) #这部分代码,大体能看懂,具体的规则还要稍后的仔细研究。##这部分代码,由于拼写失误,导致多处出错。细节决定成败!!

登录后复制

        这样再重启服务,就能在后台管理polls应用了。

(3)视图和控制器部分

            前面已经完成了model(M)的设置。剩下的只有view(V)和urls(C)了。Django的视图部分,由views.py 和 templates完成。

            在polls中,我们将创建4个视图:

“index” 列表页 – 显示最新投票。 “detail” 投票页 – 显示一个投票的问题, 以及用户可用于投票的表单。 “results” 结果页 – 显示一个投票的结果。 投票处理 – 对用户提交一个投票表单后的处理。

            现在修改 views.py 创建用于视图的函数。

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

登录后复制

from django.shortcuts import render,get_object_or_404 # Create your views here.from django.http import HttpResponsefrom polls.models import 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的自带函数,不做深究。后面再做研究!

登录后复制

            要想使试图能被访问,还要配置 urls.py 。mysite是整个网站的URLConf,但每个app可以有自己的URLConf,通过include的方式导入到根配置中即可。现在在polls下面新建 urls.py

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'^(?Pd+)/$',views.detail,name='detail'),  #ex:/polls/5/results/  url(r'^(?Pd+)/results/$',views.results,name='results'),  #ex:/polls/5/vote/  url(r'^(?Pd+)/vote/$',views.vote,name='vote'),)#url中,三个参数。正则的url,处理的函数,以及名称#正则表达式!!!!!

登录后复制

            然后在根 urls.py 文件中,include这个文件即可。

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

登录后复制

from django.conf.urls import patterns, include, url from django.contrib import adminadmin.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:两种形式。因为是元组,所以开始有“ ‘', ”。

登录后复制

            然后开始创建模板文件。在polls下,创建templates文件夹。下面有index.html, detail.html 两个文件。

{% 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)投票功能完善

            上面只是简单的实现了视图功能,并没有真正的实现投票功能。接下来就是完善功能。

#修改模板文件dizzy@dizzy-pc:~/Python/mysite$ vim polls/templates/polls/detail.html#需要加入form表单

{{ poll.question }}

{% if error_message %}

{{ error_message }}

{% endif %}

登录后复制

            然后需要修改 views.py 中的 vote 处理函数。进行post数据的接收与处理。

# 文件 polls/views.py from django.shortcuts import get_object_or_404, renderfrom django.http import HttpResponseRedirect, HttpResponsefrom django.core.urlresolvers import reversefrom polls.models import 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,)))

登录后复制

            在投票成功之后,让用户浏览器重定向到结果 results.html 页。

def results(request, poll_id):  poll = get_object_or_404(Poll, pk=poll_id)  return render(request, 'polls/results.html', {'poll': poll})

登录后复制

            然后就需要创建模板 results.html 。

 

{{ poll.question }}

登录后复制{% for choice in poll.choice_set.all %} {{ choice.choice_text }} — {{ choice.votes }} vote{{ choice.votes|pluralize }}{% endfor %}Vote again?

            至此,重启服务就能看到单选按钮,以及submit了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2535756.html

(0)
上一篇 2025年3月5日 23:05:24
下一篇 2025年3月5日 23:05:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 玩转python爬虫之正则表达式

    面对大量杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,…

    2025年3月5日
    200
  • 使用Python生成随机密码的示例分享

    生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配make_password.py ###简单几行代码执行即可生成记不住的字符串###$ python make_passwd.py DLr…

    编程技术 2025年3月5日
    200
  • 玩转python爬虫之URLError异常处理

    本节在这里主要说的是urlerror还有httperror,以及对它们的一些处理。 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try…

    编程技术 2025年3月5日
    200
  • 玩转python爬虫之cookie使用方法

    之前一篇文章我们学习了爬虫的异常处理问题,那么接下来我们一起来看一下cookie的使用。 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些…

    2025年3月5日
    200
  • 使用Python的PIL模块来进行图片对比

    在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, 开个玩笑,当然是通过机器识别的,海量的图片只有机器识别才能做到。 那用python…

    编程技术 2025年3月5日
    200
  • python编码最佳实践之总结

    相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁、易读以及可扩展性等特性使得它大受青睐。  工作中很多同事都在用python,但往往很少有…

    编程技术 2025年3月5日
    200
  • Python在Console下显示文本进度条的方法

    进度条实现原理 进度条和一般的print区别在哪里呢?答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。进度条不然,我们必…

    编程技术 2025年3月5日
    200
  • Python的GUI框架PySide的安装配置教程

    (一)说在前面     Python自带了GUI模块Tkinter,只是界面风格有些老旧。另外就是各种GUI框架了。     之前安装过WxPython,并做了简单的界面。遂最近又重新搜索了一下网上关于Python GUI框架的问题,发现还…

    2025年3月5日
    200
  • 学习python之编写简单乘法口诀表实现代码

    实现代码一、 #!/usr/bin/pythonx,y=9,9 lst=[(x,y,str(y)+’X’+str(x)+’=’+str(x*y)) for x in range(1,y+1) for y in range(1,x+1)]fo…

    编程技术 2025年3月5日
    200
  • 轻松实现python搭建微信公众平台

    本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下 使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照…

    2025年3月5日 编程技术
    200

发表回复

登录后才能评论