python-django开发学习笔记三

  

1.简述

  1.1 开发环境

  该笔记所基于的开发环境为:windows8、python2.7.5、psycopg2-2.4.2、django1.5.4、pyCharm-2.7.3。以上所描述的软件、插件安装、破解等可以参考之前的python笔记,提供了具体的资源链接和操作步骤。

  1.2 django学习笔记简介

  django学习基于官网提供的投票应用,是学习该应用编写过程中,遇到的问题、知识点、注意问题等的总结,同时包含大量学习过程中的截图,方便大家更直观的学习。  

  它将包含两部分:

    一个公共网站,可让人们查看投票的结果和让他们进行投票。

    一个管理网站,可让你添加、修改和删除投票项目。

  官网文档链接为http://django-chinese-docs.readthedocs.org/en/latest/

    python-django开发学习笔记三

  1.3 关于笔记

  同样作为初学者,写这篇文章时,刚刚看到教程的第4部分,笔记中有不足之处,还希望大家指正,真心与大家共同讨论学习!

2.关于视图 

  在 Django 应用程序中,视图是一“类”具有特定功能和模板的网页。在我们的 poll 应用程序中,将有以下四个视图:

  • Poll “index” 页 – 显示最新发布的民意调查。
  • Poll “detail” 页 – 显示一项民意调查的具体问题,不显示该项的投票结果但可以进行投票的 form 。
  • Poll “results” 页 – 显示一项给定的民意调查的投票结果。
  • 投票功能 – 为一项给定的民意调查处理投票选项。

------------------------------------------------

  博主经营一家发饰淘宝店,都是纯手工制作哦,开业冲钻,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!
店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

---------------------------------------------------------------------

继续正题...   

 
3.创建视图
3.1 views.py中创建第一个视图(简单示例)
    a).  打开文件 polls/views.py 并在其中输入以下 Python 代码
# views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the poll index.")

b).在 polls 目录下创建一个名为 urls.py 的 URLconf 文档。 你的应用目录现在看起来像这样

      img?
    c).  在 polls/urls.py 文件中输入以下代码:
# polls/urls.py
from django.conf.urlsimport patterns, url
from pollsimport views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'))

d).将 polls.urls 模块指向 root URLconf 。在 mysite/urls.py 中插入一个 include() 方法,最后的样子如下所示

# mysite/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),)

说明:

     views.py中定义页面要显示的内容
     polls/urls.py中定义polls模块的url,即访问路径和相应视图的关系
     mysite/urls.py是url的总入口,在urlpatterns中引入polls下的urls,从而建立对polls模块的链接关系
运行效果:
     python-django开发学习笔记三
3.2 url参数    
url(regex, view ,kwargs, name)
eg:
# /polls/
url(r'^$', views.index, name='index')
# /polls/5
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
# /polls/5/results
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),

3.3在视图中添加实际功能

     显示系统中最新发布的 5 个调查问题,以逗号分割并按发布日期排序
from django.http import HttpResponse
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
output = ', '.join([p.question for p in latest_poll_list])
return HttpResponse(output)

运行效果:

     python-django开发学习笔记三img?
3.4 模版的创建与使用
  templates目录下,另外创建个名为 polls 的目录,并在其中创建一个 index.html 文件。换句话说,你的模板应该是 polls/templates/polls/index.html
  img?
  模版文件
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
{% endfor %}
</ul>{% else %}
<p>No polls are available.</p>
{% endif %}

  view.py视图文件

from django.http import HttpResponse
from django.template import Context, loader
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = Context({
'latest_poll_list': latest_poll_list,
})
return HttpResponse(template.render(context))

3.5 render渲染方法(快捷方式)

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)

ps: 此时,不再需要导入 loader , Context 和 HttpResponse

 
3.6 http404异常的抛出
from django.http import Http404
# ...
def detail(request, poll_id):
try:
poll = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404
return render(request, 'polls/detail.html', {'poll': poll})
# template:polls/details.html
{{ poll }}
#快捷方式
from django.shortcuts import render, get_object_or_404
# ...
def detail(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
return render(request, 'polls/detail.html', {'poll': poll})

3.7 编写404视图??? 未完成

3.8 编写500视图??? 未完成
3.9 使用模版系统
  模板系统使用了“变量.属性”的语法访问变量的属性值
<h1>{{ poll.question }}</h1>
<ul>
{% for choice in poll.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
 
4. 移除模版中的硬编码url
4.1 去除url
     html模版中移除url
<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
<li><ahref="{%url'detail'poll.id%}">{{poll.question}}</a></li>

可在url中统一修改url值

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

4.2 Namespacing URL names URL 名称的命名空间

  url定义时,添加namespace

from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),)

  视图添加namespace

<li><ahref="{%url'polls:detail'poll.id%}">{{poll.question}}</a></li>

ps: 视图文件修改阶段

#最初,在视图中写下相对路径
#当后期需要修改时会很麻烦,因为相应的每一个视图文件都需要修改
<a href="/polls/{{ poll.id }}/">
#后期,相对于url定义的detail名称 
#仍有问题,即多模块都有detail时会出现问题
<a href="{% url 'detail' poll.id %}">
# 最后,使用命名空间,明确是polls模块的detail
# 后期若需要修改,只需要修改相应的url定义即可,不必修改视图文件;区分多模块detail冲突
<a href="{% url 'polls:detail' poll.id %}">
{{ poll.question }}
</a>

店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

上一篇:linux ls和 ll 命令


下一篇:exp-00091 oracle错误的解决办法