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/

    

  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模块的链接关系
运行效果:
     
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)

运行效果:

     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/

转载于:https://www.cnblogs.com/qiongmiaoer/p/3358798.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值