두번째 워크 장고 장고 번째 프레임 워크

첫째, 지식 검토

1, MTV 모델

  모델 : 모델 및 데이터베이스 관련

  템플릿 : 템플릿, 저장 HTML 파일, 템플릿, 구문 (HTML 페이지에 삽입하는 방법 영리 변수의 목적).

  시청자보기 기능

플러스의 URL : 경로와 URL ,,보기 기능을 할 수 없습니다 1-1 사이의 매핑.

2, 관련 명령

  장고 프로젝트를 만듭니다 장고 - 관리자 startproject 프로젝트 이름을

  프로젝트의 응용 프로그램을 만들기 : python3 manage.py의 startApp APPNAME

  실행 IP 포트의 runserver python3의 manage.py를

3 URL 구성 (URLconf) urls.py

  기능 : URL 매핑 관계는보기 기능을 설정

  URL (정규식 (규칙)보기 기능 [선택])

   URL : HTTP : //127.0.0.1 : 8080 / 블로그 / 기사 / 2003 / 05 = 1 & B = 2

     일치 문자열 : 홈페이지 사용자 입력에 대응 경로 / 블로그 / 기사 / 2003/05

 참고 :

  (1) 인 현상의 출현의 경우, 매칭 규칙 충돌, 제 매치 URL을 포함

  (2) 알 패킷 : URL (R '^ 기사 / (\ d를 {4}) / (\ {2} D) $'views.year_month) # 년도 (requset, 1990,12) 위치 파라미터에 따라

  (3) 공지 패킷 : URL (LT '기사 ^ / (R ? P <년> # 년도 (requset?. \ 4 {D}) / (P <달> \ D {2}) $'views.year_month) 연도 = 1990, 월 = 12 ) 위치 - 매개 변수에 의해

  (4) URL 分发 : 홈페이지 (R '^ 블로그 /') ( 'blog.urls'를 포함)

보충보기 기능

1보기 기능 : 그것은합니다 (HttpResponse에 렌더링 오브젝트의 내부 원) 두 개의 개체를 포함 할 수 있어야

       요청 개체 : ----- "모든 정보 요청

       HttpResponse에 : ----- "응답의 내용 (문자열)

HTTP : //127.0.0.1 : 8000 / login.html 사용자 = ASD 및 PWD = ASD 2, 데이터를 전송하는 요청을 얻을?

  키 : 데이터 요청을 포함하는
    . 1 :``request.GET`` 데이터가 {} 빈 사전 없을 경우 데이터 요청을 GET
    , 2 request.POST의 : 데이터가 빈 사전이 {}없는 경우, 데이터 POST 요청
    . 3, 요청 .method 는 GET 또는 POST 요청 :: 실시 예
    4 때 값의 복수의 키 요청 : request.POST.getlist ( "취미")   . 5 request.path : 요청 경로 (경로 얻을, 데이터를 얻을 수 없다)    
           

          요청 URL : HTTP : //127.0.0.1 : 8000 / index.html을 / 23 A. 1 =?
          경로 : request.path : /index.html/23
              . 6,   request.get_full_path ()  : 요청 경로 (데이터 경로 및 걸릴 것 )에
         요청 URL : HTTP : //127.0.0.1 : 8000 / index.html을 / 23 A = 1
         request.get_full_path () :? / index.html을 / 23 A = 1

  

셋째, 차이점은 렌더링 함수 및 기능을 리디렉션

렌더링 : 전용 페이지의 콘텐츠로 돌아가지만, 두 번째 요청을 보내지 않습니다

재 : 두 번째 요청, URL 업데이트를 재생

구체적인 예

세우다:

재 :

 넷째, 역 분석

사용 장고 프로젝트에서 공통의 요구 사항은 생성 된 컨텐츠에 포함 (및 뷰가 사용자의 URL로 표시 등) 또는 탐색 처리 서버 (재)에 대한 URL의 최종 형태를 얻는 것입니다.

가 만료 어느 정도의 URL로 이어질 쉽기 때문에 강한 소원은 URL (힘든, 오류가 발생하기 쉽고 확장되지 않음) 또는 관련없는 특별한 URL 생성 메커니즘 URLconf를 디자인은 하드 코드가 없습니다.

즉, 필요한 것은 메커니즘의 DRY이다. 다른 작은 가운데, 그것은 또한 자동으로 검색하고 오래된 URL을 대체하는 프로젝트의 소스 코드를 탐색 할 필요없이 업데이트 할 수있는 URL의 설계가 가능.

의 URL의 시작의 값을 얻을하는 데 필요한 유형 (위치 매개 변수, 키워드 매개 변수) 및 기타 정보는 정보가 식별 (예 : 이름)의 뷰를 처리 할 생각보기의 정확한 URL 매개 변수를 찾을 수있다.

장고는 방법은 URL 매핑 URL 디자인은 유일한 장소입니다 수 있도록하는 것입니다 제공합니다. 그런 다음, 당신의 URLconf를 채울 양 방향에서 사용 :

  • URL 요청 사용자 / 브라우저가 시작 따르면, 그것은 올바른 장고보기를 호출하고 URL로부터 필요한 매개 변수의 값을 추출합니다.
  • 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。

第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。

在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。
  • 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
  • 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。

例子:

考虑下面的URLconf:

复制代码
复制代码
from django.conf.urls import url

from . import views

urlpatterns = [
    #...
    url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    #...
]
复制代码
复制代码

根据这里的设计,某一年nnnn对应的归档的URL是/articles/nnnn/

你可以在模板的代码中使用下面的方法获得它们:

复制代码
复制代码
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
复制代码
复制代码

在Python 代码中,这样使用:

复制代码
复制代码
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
复制代码
复制代码

如果出于某种原因决定按年归档文章发布的URL应该调整一下,那么你将只需要修改URLconf 中的内容。

在某些场景中,一个视图是通用的,所以在URL 和视图之间存在多对一的关系。对于这些情况,当反查URL 时,只有视图的名字还不够。

 

例子中:

分析:想我们一开始写的硬编码,也就是吧action要跳转的路径写死了。但是像淘宝,天猫等都会经常更新新东西,,那么你的页面上的url路径也会时不时的变化。但是如果有特别多的商品,那么你就得去服务端一个一个的改,这样显得很麻烦,那么有没有一种机制帮我们解决问题呢?那就按照我下面的办法解决。就把url路径写活了。

1、首先给url起一个别名。

2、然后在login.html中写上{%  url ‘别名’’  %}    ,如果在页面中点击查看元素,它会变成login.html,,,当然我的是分发了,,就会变成test/login.html

3、这样你就可以修改你的正则了,,因为他是按照别名走的,不会影响。

urls.py

login.html

查看元素的结果:

 

 这样的好处是:无论你怎么改你要匹配的url,只要你写上了别名。在html实现了模板语法,就会去找别名对应的那个url,以后不管你怎么改url都没事,就写活了,就不像一开始写的硬编码了。

 

一、知识点回顾

1、MTV模型

  model:模型,和数据库相关的

  template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中)。

  views:视图函数

另加urls:url路径与视图函数的映射关系,,可以不是一一对应的。

2、相关的一些命令

  创建一个Django项目:django-admin  startproject  projectname

  创建一个项目下的应用:python3  manage.py  startapp  appname

  运行:python3  manage.py  runserver  IP PORT

3、url配置(URLconf)urls.py

  功能:建立起url与视图函数的映射关系

  url(正则表达式(规则),视图函数,[可选参数])

   url:http://127.0.0.1:8080/blog/articles/2003/05?a=1&b=2

     匹配字符串:用户输入的url对应的路径    /blog/articles/2003/05

 注意:

  (1)出现覆盖现象的情况,也就是匹配规则冲突的时候,匹配第一个url

  (2)无名分组:url(r'^articles/(\d{4})/(\d{2})$', views.year_month),  # year(requset,1990,12)   按位置传参数

  (3)有名分组:url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})$', views.year_month),  # year(requset,year=1990,month=12)   按位置传参数

  (4)url分发:url(r'^blog/',include('blog.urls'))

二、视图函数的补充

1、视图函数:一定是要包含两个对象的(render源码里面有HttpResponse对象)

       request对象:-----》所有的请求信息

       HttpResponse:-----》响应的内容(字符串)

2、get请求发送数据:http://127.0.0.1:8000/login.html?user=asd&pwd=asd

  重点:request里包含哪些数据
    1、request.GET: GET请求的数据,如果没有数据是一个空字典    {}
    2、request.POST:POST请求的数据 ,如果没有数据是一个空字典  {}
    3、request.method:请求方式:GET 或 POST
    4、请求某个键下多个值时:request.POST.getlist("hobby")
              5、 request.path : 请求路径(只会拿到路径,不拿数据)    

          请求url:http://127.0.0.1:8000/index.html/23?a=1
          path:request.path:/index.html/23
              6、  request.get_full_path()  :请求路径(路径和数据都会拿到)
         请求url:http://127.0.0.1:8000/index.html/23?a=1
         request.get_full_path():/index.html/23?a=1

  

三、render函数和redirect函数的区别

render:只会返回页面内容,但是未发送第二次请求

redirect:发挥了第二次请求,url更新

具体实例说明

render:

redirect:

 四、反向解析

在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。

人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。

获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。

Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:

  • 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
  • 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。

第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。

在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。
  • 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
  • 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。

例子:

考虑下面的URLconf:

复制代码
复制代码
from django.conf.urls import url

from . import views

urlpatterns = [
    #...
    url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    #...
]
复制代码
复制代码

根据这里的设计,某一年nnnn对应的归档的URL是/articles/nnnn/

你可以在模板的代码中使用下面的方法获得它们:

复制代码
复制代码
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
复制代码
复制代码

在Python 代码中,这样使用:

复制代码
复制代码
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
复制代码
复制代码

如果出于某种原因决定按年归档文章发布的URL应该调整一下,那么你将只需要修改URLconf 中的内容。

在某些场景中,一个视图是通用的,所以在URL 和视图之间存在多对一的关系。对于这些情况,当反查URL 时,只有视图的名字还不够。

 

例子中:

分析:想我们一开始写的硬编码,也就是吧action要跳转的路径写死了。但是像淘宝,天猫等都会经常更新新东西,,那么你的页面上的url路径也会时不时的变化。但是如果有特别多的商品,那么你就得去服务端一个一个的改,这样显得很麻烦,那么有没有一种机制帮我们解决问题呢?那就按照我下面的办法解决。就把url路径写活了。

1、首先给url起一个别名。

2、然后在login.html中写上{%  url ‘别名’’  %}    ,如果在页面中点击查看元素,它会变成login.html,,,当然我的是分发了,,就会变成test/login.html

3、这样你就可以修改你的正则了,,因为他是按照别名走的,不会影响。

urls.py

login.html

查看元素的结果:

 

 这样的好处是:无论你怎么改你要匹配的url,只要你写上了别名。在html实现了模板语法,就会去找别名对应的那个url,以后不管你怎么改url都没事,就写活了,就不像一开始写的硬编码了。

 

추천

출처www.cnblogs.com/maaosheng/p/11621542.html