Ywc's blog

Django学习笔记

Word count: 1.8kReading time: 7 min
2019/07/06

Django简介

Django是一个高级Python Web框架, 鼓励快速,简洁, 以程序设计的思想进行开发. 通过使用这个框架, 可以减少很多开发麻烦, 使你更专注于编写自己的app, 而不需要重复造轮子. Django免费并且开源.

Django特点

  • 完全免费并开源源代码

  • 快速高效开发

  • 使用MTV架构(熟悉Web开发的应该会说是MVC架构)

  • 强大的可扩展性.

Django学习笔记

用户在浏览器中输入URL后的回车, 浏览器会对URL进行检查, 首先判断协议,如果是http就按照 Web 来处理, 然互调用DNS查询, 将域名转换为IP地址, 然后经过网络传输到达对应Web服务器, 服务器对url进行解析后, 调用View中的逻辑(MTV中的V), 其中又涉及到Model(MTV中的M), 与数据库的进行交互, 将数据发到Template(MTV中的T)进行渲染, 然后发送到浏览器中, 浏览器以合适的方式呈现给用户。

MVC设计模式

模型-视图-控制器(MVC):MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。

这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。 比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。

实例;4个Python的文件:

  • models.py 文件主要用一个 Python 类来描述数据表。 称为模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。

  • views.py文件包含了页面的业务逻辑。 下例latest_books()函数叫做视图。

  • urls.py 指出了什么样的 URL 调用什么的视图。
    在这个例子中 /latest/ URL 将会调用 latest_books()这个函数。 换句话说,如果你的域名是example.com,任何人浏览网址http://example.com/latest/将会调用latest_books()这个函数。

  • latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# models.py (the database tables)

from django.db import models

class Book(models.Model):
name = models.CharField(max_length=50)
pub_date = models.DateField()

# views.py (the business logic)

from django.shortcuts import render_to_response
from models import Book

def latest_books(request):
book_list = Book.objects.order_by('-pub_date')[:10]
return render_to_response('latest_books.html', {'book_list': book_list})

# urls.py (the URL configuration)

from django.conf.urls.defaults import *
import views

urlpatterns = patterns('',
(r'^latest/$', views.latest_books),
)

# latest_books.html (the template)

<html><head><title>Books</title></head>
<body>
<h1>Books</h1>
<ul>
{% for book in book_list %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body></html>

学习笔记

Django系统

环境搭建

  • anaconda+pycharm (anaconda安装的环境是虚拟的环境,和自己电脑上的环境是独立的)
  • anaconda使用
    • conda list:显示当前环境安装的包
    • conda env list:显示安装的虚拟环境列表
    • conda create -n env_name(自己定义一个名字) python=3.6
    • 激活(进入)conda的虚拟环境
      • (linux)source activate env_name
      • (win)activate env_name
    • pip install django=1.8

pip下载模块太慢,可以指定源(文章

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 模块

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django=1.8

创建第一个Django程序

  • 命令行启动

       django-admin startproject djangolearn
       cd djangolearn
       python manage.py runserver
    
  • pycharm启动

    • 需要配置(环境)
      • File–>Settings–>Project:workspace–>Project Interpreter–>add–> Existing environment 选择已经安装好的环境
      • django要配置runserver

Django学习笔记

Django学习笔记

路由系统-urls

  • 创建app

    • app:负责一个具体业务或者一类具体业务的模块
    • python manage.py startapp teacher (teacher就是app的名字)
  • 路由

    • 按照安装具体的请求url,导入到相应的业务处理模块的一个功能模块
    • django的信息控制中枢
    • 本质上是接受的URL和相应的处理模块的一个映射
    • 在接受URL请求的匹配上使用了RE
    • URL的具体格式如urls.py中所示
  • 需要关注两点:

    1. 接受的URL是什么,即如何用RE对传入URL进行匹配
    2. 已知URL匹配到哪个处理模块
  • url匹配规则

    • 从上往下一个一个比对
    • url格式是分级格式,则按照级别一级一级往下比对,主要对应url包含子url的情况
    • 子url一旦被调用,则不会返回到主url
      • /one/two/three/
    • 正则以r开头,表示不需要转义,注意尖号(^)和美元符号($) (^代表从头开始 $代表从尾开始)
      • /one/two/three r’^one/ 配对
      • /oo/one/two/three r’^one/“ 不配对
      • /one/two/three/ r’three/$’ 配对
      • /oo/one/two/three/oo/ r’three/$” 不配对
      • 开头不需要有反斜杠
    • 如果从上向下都没有找到合适的匹配内容,则报错

2. 正常映射

  • 把某一个符合RE的URL映射到事物处理函数中去
    • 举例如下:

      1
      2
      3
      4
      5
      6
      from showeast import views as sv

      urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(r'^normalmap/', sv.normalmap),
      ]

3. URL中带参数映射

  • 在事件处理代码中需要由URL传入参数,形如 /myurl/param中的param

  • 参数都是字符串形式,如果需要整数等形式需要自行转换

  • 通常的形式如下:

    1
    /search/page/432 中的 432需要经常性变换,所以设置成参数比较合适

4.URL在app中处理

  • 如果所有应用URL都集中tulingxueyuan/urls.py中,可能导致文件的臃肿
  • 可以把urls具体功能逐渐分散到每个app中
    • 从django.conf.urls 导入 include
    • 注意此时RE部分的写法
    • 添加include导入
  • 使用方法
    • 确保include被导入
    • 写主路由的开头url
    • 写子路由
    • 编写views函数
  • 同样可以使用参数

5.URL中的嵌套参数

  • 捕获某个参数的一部分
  • 例如URL /index/page-3, 需要捕获数字3作为参数
    1
    2
    url(r'index_1/(page-(\d+)/)?$', sv.myindex_1), #不太好
    url(r'index_2/(?:page-(?P<page_number>\d+)/)?$', sv.myindex_2), #好
  • 上述例子会得到两个参数,但 ?: 表明忽略此参数
CATALOG
  1. 1. Django简介
    1. 1.1. Django特点
    2. 1.2. MVC设计模式
  2. 2. 学习笔记
    1. 2.1. Django系统
    2. 2.2. 环境搭建
    3. 2.3. 创建第一个Django程序
    4. 2.4. 路由系统-urls
    5. 2.5. 2. 正常映射
    6. 2.6. 3. URL中带参数映射
    7. 2.7. 4.URL在app中处理
    8. 2.8. 5.URL中的嵌套参数