Django2 中文学习指南

by [fz420@qq.com]

Django介绍

诞生2003~,Simon和Andrian开发,以快速开发目的实现Django。

Django版本和Python版本选择:

Django Version Python Version
1.8 2.7,3.2, 3.3,3.4,3.5
1.9,1.10 2.7,3.4,3.5
1.11 2.7,3.4,3.5,
2.0 3.4,3.5,3.6
2.1 3.5,3.6,3.7

本文档代码基于 django2.0.x + python3.6

Django和MVC

django是一个遵循MVC设计模式的框架,MVC是model/view/controller的三个单词的简写。分别代表模型、视图、控制器。

第01章 入门 - 图1

第01章 入门

搭建环境

最佳实践:https://pythonguidecn.readthedocs.io/zh/latest/writing/structure.html#django-applications

使用以下命令创建项目时

  1. $ django-admin.py startproject samplesite
  2. # 这样的操作生成的仓库结构是这样的:
  3. README.rst
  4. samplesite/manage.py
  5. samplesite/samplesite/settings.py
  6. samplesite/samplesite/wsgi.py
  7. samplesite/samplesite/sampleapp/models.py

亲,不要这样做。

相对路径会让您的工具和您的开发者都很疑惑。没有必要的嵌套对任何人都没有好处(除非您怀念庞大的SVN仓库)。

让我们这样来做:

  1. # 1. 进入 git 仓库
  2. # 2. 新建项目
  3. $ cd git_repo/
  4. $ django-admin.py startproject samplesite .
  5. # 注意末尾的 "."。生成的结构是这样的:
  6. README.rst
  7. manage.py
  8. samplesite/settings.py
  9. samplesite/wsgi.py
  10. samplesite/sampleapp/models.py

设计模型

初始化项目

  1. # 初始化项目
  2. # 一个事例
  3. #├── Hello <=APP資料夾
  4. #│ ├── admin.py
  5. #│ ├── apps.py
  6. #│ ├── __init__.py
  7. #│ ├── migrations
  8. #│ │ └── __init__.py
  9. #│ ├── models.py
  10. #│ ├── tests.py
  11. #│ └── views.py
  12. #├── manage.py # Django项目管理
  13. #└── mysite <=Project設定檔資料夾
  14. # ├── __init__.py
  15. # ├── settings.py # 全局设置文件
  16. # ├── urls.py # 全局路由控制
  17. # └── wsgi.py # 服务器使用wsgi部署的文件
  18. $ django-admin startproject webapp
  19. # 创建应用
  20. dj_test\webapp>python manage.py startapp booktest
  21. # 定义模型
  22. # yourapp/models.py
  23. from django.db import models
  24. class BookInfo(models.Model):
  25. btitle = models.CharField(max_length=20)
  26. bpub_data = models.DateTimeField()
  27. class HeroInfo(models.Model):
  28. hname = models.CharField(max_length=20)
  29. hgender = models.BooleanField()
  30. hcontent = models.CharField(max_length=1000)
  31. hbook = models.ForeignKey(BookInfo)
  32. # 注册应用
  33. # project/settings.py
  34. INSTALLED_APPS = [
  35. ...
  36. 'booktest' # 注册应用
  37. ]
  38. # 初始化迁移文件
  39. dj_test\webapp>python manage.py makemigrations

管理站点

  1. dj_test\webapp>python manage.py createsuperuser
  2. (venv) D:\note\mycodes\python\dj_test\webapp>python manage.py createsuperuser
  3. Username (leave blank to use 'lite'): admin
  4. Email address: admin@qq.com
  5. Password:
  6. Password (again):
  7. Superuser created successfully.
  8. (venv) D:\note\mycodes\python\dj_test\webapp>

自定义管理页面

django settings

Django的settings文件包含Django项目的所有配置项且均大写。配置文件只是一个使用模块级变量的一个Python模块。

因为配置文件是Python模块,所以要注意以下几项:

  • 不能有Python语法错误
  • 可以用Python语法实现动态配置,例如:MY_SETTING = [str(i) for i in range(30)]
  • 可以从其他配置文件中引入变量

查看你已经更改了哪个配置

python manage.pydiffsettings

在python代码中使用settings

在具体的Django应用中, 通过引入 django.conf.settings 使用配置, 例:

  1. from django.conf import settings
  2. if settings.DEBUG:
  3. # Do something

注意 django.conf.settings 并不是一个模块!— 而是一个对象!所以引入某个单独的设置项是不可能的:

  1. from django.conf.settings import DEBUG # This won't work.

运行时更改设置

不建议在运行时更改设置. 比如, 不要在view中这样用:

  1. from django.conf import settings
  2. settings.DEBUG = True # Don't do this!

自定义配置

没有什么能够阻止您为自己的Django应用程序创建自己的设置。请遵循以下准则:

  • 设置名称必须全部大写。
  • 不要重新设置已存在的配置项。

对于序列设置,Django本身使用列表,但这只是一个约定