1上网的流程:

  • 打开浏览器,输入网址(http://zmrenwu.com/)
  • 浏览器根据输入网址,完成以下几件事:1识别服务器地址,2将用户的浏览意图打包成一个http请求,发送给服务器,等待服务器响应请求
  • 服务器接收到请求后,根据请求从数据库查询,取出数据,并将这些数据嵌入到html中,打包成http响应,返回给浏览器
  • 浏览器接收到响应,解读响应,把html文档解析并显示给用户

  从上面的流程来看,django就是一个服务器,其主要解决问题:接收浏览器发送的请求,返回响应给浏览器

  从而,会产生几个疑问:

  • django如何接收http请求
  • django如何处理这个请求
  • django如何生成响应

2设计简单hello 视图,来了解django如何解决上面的三个问题

  1. 绑定URL与视图函数

    • Django 需要知道当用户访问不同的网址时,应该如何处理这些不同的网址(即所说的路由)。Django 的做法是把不同的网址对应的处理函数写在一个 urls.py 文件里,当用户访问某个网址时,Django 就去会这个文件里找,如果找到这个网址,就会调用和它绑定在一起的处理函数(叫做视图函数)。
    • 在blog新建一个urls.py
        1. # coding=utf8
        2.  
        3. from django.conf.urls import url
        4.  
        5. from .import views
        6.  
        7. urlpatterns = [
        8. url(r"^$", views.index, name="index"),
        9. ]

        首先从 django.conf.urls 导入了 url 函数,又从当前目录下导入了 views 模块。然后把网址和处理函数的关系写在了 urlpatterns 列表里。

        绑定关系的写法:

        • 调用 url 函数(第一个参数是网址,第二个参数是处理函数),另外我们还传递了另外一个参数 name,这个参数的值将作为处理函数 index 的别名,这在以后会用到。

          第一个参数网址: 是正则表达式,Django 会用此正则表达式去匹配用户实际输入的网址(去掉http,域名,端口后),如果匹配成功,就会调用其后面的视图函数做相应的处理。

          比如本地开发服务器的域名是 http://127.0.0.1:8000,那么当用户输入网址 http://127.0.0.1:8000 后,Django 首先会把协议 http、域名 127.0.0.1 和端口号 8000 去掉,此时只剩下一个空字符串,而 r'^$' 的模式正是匹配一个空字符串(这个正则表达式的意思是以空字符串开头且以空字符串结尾),于是二者匹配,Django 便会调用其对应的 views.index 函数。

        • 注意:在项目根目录的 blogproject\ 目录下(即 settings.py 所在的目录),原本就有一个 urls.py 文件,这是整个工程项目的 URL 配置文件。而我们这里新建了一个 urls.py 文件,且位于 blog 应用下。这个文件将用于 blog 应用相关的 URL 配置。不要把两个文件搞混了。
  2. 编写视图函数blog/views.py
    • urls.py设置的视图函数为index(),views.py内容如下

        1. # coding=utf8
        2.  
        3. from django.shortcuts import render
        4. from django.http import HttpResponse
        5.  
        6. # Create your views here.
        7.  
        8. def index(request):
        9. return HttpResponse("欢迎访问我的博客首页")
    • 上面说过,web服务器:接收请求,处理请求,返回响应, index两行代码完美解析这三个功能:
      • 首先接收了request参数,request就是django封装好的Http请求,他说HttpRequest的一个实例
      • 返回一个响应,这个响应是HttpResponse的一个实例,传递了一个自定义的字符串参数
      • 可以预计浏览器显示给用户:欢迎访问我的博客首页
  3. 配置项目(工程)URL(不是应用URL)
    • 还差最后一步了,我们前面建立了一个 urls.py 文件,并且绑定了 URL 和视图函数 index,但是 Django 并不知道。Django 匹配 URL 模式是在 blogproject\ 目录(即 settings.py 文件所在的目录)的 urls.py 下的,所以我们要把 blog 应用下的 urls.py 文件包含到 blogproject\urls.py 里去
    • 编写blogproject\urls.py,内容如下
        1. - from django.conf.urls import url
        2. + from django.conf.urls import url, include
        3. from django.contrib import admin
        4.  
        5. urlpatterns = [
        6. url(r'^admin/', admin.site.urls),
        7. + url(r'', include('blog.urls')),
        8. ]

        这里- 表示删除一行,+增加一行,其实就是注释里面的:

        1. Including another URLconf
        2. 1. Import the include() function: from django.conf.urls import url, include
        3. 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
      • 理解是怎么将应用blog/url增加进来的,调用了一个include函数,传递“blog.urls”,实现将应用blog/urls.py的添加进来
      • url(r'', include('blog.urls') )是将空格和blog/urls.py里面的url拼接起来,如果是url(r'blog', include('blog.urls'),而我们blog/urls.py里面的url为:
          1. url(r"^$", views.index, name="index"),因此拼接起来网址:http://127.0.0.1:8000/blog/

            

  4. 运行项目:进入manage.py目录,python manage.py runserver打开web服务器,浏览器输入网址:http://127.0.0.1:8000/
  5. 可以看到页面显示:欢迎来到我的博客首页

[python][django学习篇][7]设计博客视图(1)的更多相关文章

  1. [python][django学习篇][9]设计正在博客视图(3)

    需求: 真正的首页视图函数,当用户访问我们的博客首页时,他将看到我们发表的博客文章列表,就像 演示项目 里展示的这样.t https://docs.djangoproject.com/en/1.10/ ...

  2. [python][django学习篇][11]后台admin用户登录博客,添加文章---这一章和博客首页设计没有关系

    1 如果没有创建超级管理员账号,先要创建python manage.py createsuperuser 2 在admin后台注册模型(如果没有这一步,登录http://127.0.0.1:8000/ ...

  3. [python][django学习篇][15]博客侧栏--自定义模板标签

    我们的博客侧边栏有四项内容:最新文章.归档.分类和标签云. 这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写 ...

  4. [python][django学习篇][3]创建django web的数据库模型

    推荐学习博客:http://pythonzh.cn/post/8/ 博客或者web界面向用户展示内容,它需要从某个地方获取博客内容或者web界面内容,才能够展示出来.通常来说:某个地方指的就是数据库 ...

  5. [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库

    推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...

  6. Django学习(六)---博客文章页面的超链接设置

    Django中的超链接 超链接的目标地址 href后面是目标地址 template中可以用 {% url  'app_name : url_name'   param %} app_name:应用命名 ...

  7. [python][django学习篇][2]创建django app

    推荐学校django博客:http://pythonzh.cn/post/8/ django app 可以理解为一个文件夹: 里面包含了相关功能的代码.通过manage.py来创建 web app 激 ...

  8. [python][django学习篇][8]django 视图(2) --简单模板

    在视图函数里返回的是一个 HttpResponse 类的实例,我们给它传入了一个希望显示在用户浏览器上的字符串.但是我们的博客不可能只显示这么一句话,它有可能会显示很长很长的内容.比如我们发布的博客文 ...

  9. [python][django学习篇][12]继续设计博客首页,点击博客标题能显示文章的详情

    回顾一下开发流程:配置url, 编写视图函数,编写对应模板 配置URL 首页视图匹配的 URL 去掉域名后,是一个空的字符串.每篇文章的详情有着不同的 URL,因此可以设计文章详情页面URl:< ...

随机推荐

  1. C# 字符串转组件名、变量名

    字符串转组件名 (Controls["button1"] as Button).Text = "Hello";//单独组件 (Controls[].Contro ...

  2. JIRA Plugin Development——Configurable Custom Field Plugin

    关于JIRA Plugin开发的中文资料相当少,这可能还是由于JIRA Plugin开发在国内比较小众的原因吧,下面介绍下自己的一个JIRA Plugin开发的详细过程. 业务需求 创建JIRA IS ...

  3. Uploadify 3.2 参数属性、事件、方法函数详解以及配置

    一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass ” 按钮样式 buttonCursor ‘ ...

  4. 【洛谷2633】Count on a tree(树上主席树)

    点此看题面 大致题意: 给你一棵树,每次问你两点之间第\(k\)小的点权,强制在线. 主席树 这种题目强制在线一般就是数据结构了. 而看到区间第\(k\)小,很容易就能想到主席树. 至少不会有人想到树 ...

  5. 【转】浅谈Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...

  6. Jmeter模拟http请求

    一.获取用户信息(GET请求):http://hostname/getuser?userid=1 1.打开jmeter,创建一个线程组,再添加一个http请求Sampler 2.设置域名.路径.请求方 ...

  7. C# sizeof运算符

    一.C# sizeof运算符 sizeof运算符用于获取值类型的字节数. 二.示例 using System;using System.Collections.Generic;using System ...

  8. Java十进制转成二进制 八进制 十六进制

    int a = 357;//十进制转成二进制System.out.println(Integer.toBinaryString(a)); package com.swift; import java. ...

  9. 1047: [HAOI2007]理想的正方形

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4075  Solved: 2277[Submit][Status][Discuss] Descript ...

  10. 【Linux】linux 机器之间 zssh, rz, sz互相传输

    服务器端安装lrzsz: sudo  yum install lrzsz 本地客户端安装lrzsz: brew install lrzsz 本地客户端安装zssh: brew install zssh ...