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” 页 – 显示一项给定的民意调查的投票结果。
  • 投票功能 – 为一项给定的民意调查处理投票选项。

  1. ------------------------------------------------

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

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

继续正题...   

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

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

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

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

  1. # mysite/urls.py
  2. from django.conf.urls import patterns, include, url
  3. from django.contrib import admin
  4. admin.autodiscover()
  5. urlpatterns = patterns('',
  6. url(r'^polls/', include('polls.urls')),
  7. 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参数    
  1. url(regex, view ,kwargs, name)
  1. eg:
  1. # /polls/
  2. url(r'^$', views.index, name='index')
  3. # /polls/5
  4. url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
  5. # /polls/5/results
  6. url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),

3.3在视图中添加实际功能

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

运行效果:

     img?
3.4 模版的创建与使用

  templates目录下,另外创建个名为 polls 的目录,并在其中创建一个 index.html 文件。换句话说,你的模板应该是 polls/templates/polls/index.html
  img?
  模版文件
  1. {% if latest_poll_list %}
  2. <ul>
  3. {% for poll in latest_poll_list %}
  4. <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
  5. {% endfor %}
  6. </ul>{% else %}
  7. <p>No polls are available.</p>
  8. {% endif %}

  view.py视图文件

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

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

  1. def index(request):
  2. latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
  3. context = {'latest_poll_list': latest_poll_list}
  4. return render(request, 'polls/index.html', context)

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

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

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

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

可在url中统一修改url值

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

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

  url定义时,添加namespace

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

  视图添加namespace

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

ps: 视图文件修改阶段

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

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

python-django开发学习笔记三的更多相关文章

  1. python web开发学习笔记一:javascript基础

    一.认识js: 能进入到软件所实习是我的最大的收获,也是我的荣幸,我相信努力付出一定能够换回收获. 项目最先开始的是接触到web前端的一些内容,我们需要利用flask搭建应该有的框架.我有一些pyth ...

  2. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  3. python Django 相关学习笔记

    Django框架 pip3 install django 命令: # 创建Django程序 django-admin startproject mysite # 进入程序目录 cd mysite # ...

  4. Photon + Unity3D 线上游戏开发 学习笔记(三)

    好的,说了两篇了 如今我们正式的入手,揭开photon 的盖头哈  建立photon项目 第一步:   在Visual studio建立一个空的 待会为了測试也会在里面建立一个client 项目 (只 ...

  5. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

  6. The Definitive Guide To Django 2 学习笔记(三) URLconfs 和松耦合

    前面的例子体现了一个设计模式中的重要思想,松耦合. 不论我们是将/time/改成/current_time/,还是新建一个/another-time-page/同样指向views.py中的 curre ...

  7. Django:学习笔记(1)——开发环境配置

    Django:学习笔记(1)——开发环境配置 Django的安装与配置 安装Django 首先,我们可以执行python -m django --version命令,查看是否已安装django. 如果 ...

  8. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  9. Django初识 学习笔记一

    Django初识 学习笔记一 mvcviewsmodelstemplate. 一 MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(c ...

随机推荐

  1. Openlayers 3计算长度和面积

    1.比较粗糙的计算方式 计算长度 var length = lineFeature.getGeometry().getLength(); if (length > 1000) { length ...

  2. ajax+json+Struts2实现list传递(转载)

    一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4       commons-logging-1.0.4       c ...

  3. 史上最强大的python selenium webdriver的包装

    1.之前已经发过两次使用单浏览器了,但是这个最完美,此篇并没有使用任何单例模式的设计模式,用了实例属性结果缓存到类属性. 2.最简单的控制单浏览器是只实例化一次类,然后一直使用这个对象,但每个地方运行 ...

  4. [RN] 01 - Init: Try a little bit of React Native

    Ref: React Native跨平台移动应用开发 后记:这本书博客味有点浓. 本篇涉及新建工程的若干套路,以及一点语法知识. 创建新工程 (1) 解决的一大核心问题: (2) 使用Javascri ...

  5. 禁用滚动视图ListView、ViewPager、ScrollView、HorizontalScrollView、WebView边界颜色渐变

    禁用滚动视图ListView.ViewPager.ScrollView.HorizontalScrollView.WebView边界颜色渐变 ListView.ViewPager.ScrollView ...

  6. [AX]AX2012 R2 EP员工自助服务中的产品不能显示图片的问题

    在员工自助服务EP站点中员工可以通过Order products自助提交采购申请,在正确设置员工采购目录后会罗列出允许员工购买的产品,每个产品都可带有图片,我们可以通过Product image来为产 ...

  7. Window日志分析

    0X00 简介 0x01 基本设置 A.Windows审核策略设置 前提:开启审核策略,若日后系统出现故障.安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等. 打开设置窗口 Window ...

  8. Apache安全配置基线指导

    搜索关键词:Apache安全配置基线指导 参考链接: windows服务器下Apache 的降权 https://www.landui.com/help/show-1749.html

  9. Git 学习笔记--3.EGit使用手册

    zz http://blog.csdn.net/pandakong/article/details/7234974 EGit是Eclipse上的Git插件,官方内容参看http://wiki.ecli ...

  10. Python 网络爬虫

    爬虫介绍 爬取图片 爬取文本 爬虫相关模块:re 爬虫相关模块:urllib 爬虫相关模块:urllib2 爬虫相关模块:cookielib 爬虫相关模块:requests 爬取需要登录的页面