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章 入门
搭建环境
最佳实践:https://pythonguidecn.readthedocs.io/zh/latest/writing/structure.html#django-applications
使用以下命令创建项目时
$ django-admin.py startproject samplesite
# 这样的操作生成的仓库结构是这样的:
README.rst
samplesite/manage.py
samplesite/samplesite/settings.py
samplesite/samplesite/wsgi.py
samplesite/samplesite/sampleapp/models.py
亲,不要这样做。
相对路径会让您的工具和您的开发者都很疑惑。没有必要的嵌套对任何人都没有好处(除非您怀念庞大的SVN仓库)。
让我们这样来做:
# 1. 进入 git 仓库
# 2. 新建项目
$ cd git_repo/
$ django-admin.py startproject samplesite .
# 注意末尾的 "."。生成的结构是这样的:
README.rst
manage.py
samplesite/settings.py
samplesite/wsgi.py
samplesite/sampleapp/models.py
设计模型
初始化项目
# 初始化项目
# 一个事例
#├── Hello <=APP資料夾
#│ ├── admin.py
#│ ├── apps.py
#│ ├── __init__.py
#│ ├── migrations
#│ │ └── __init__.py
#│ ├── models.py
#│ ├── tests.py
#│ └── views.py
#├── manage.py # Django项目管理
#└── mysite <=Project設定檔資料夾
# ├── __init__.py
# ├── settings.py # 全局设置文件
# ├── urls.py # 全局路由控制
# └── wsgi.py # 服务器使用wsgi部署的文件
$ django-admin startproject webapp
# 创建应用
dj_test\webapp>python manage.py startapp booktest
# 定义模型
# yourapp/models.py
from django.db import models
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_data = models.DateTimeField()
class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=1000)
hbook = models.ForeignKey(BookInfo)
# 注册应用
# project/settings.py
INSTALLED_APPS = [
...
'booktest' # 注册应用
]
# 初始化迁移文件
dj_test\webapp>python manage.py makemigrations
管理站点
dj_test\webapp>python manage.py createsuperuser
(venv) D:\note\mycodes\python\dj_test\webapp>python manage.py createsuperuser
Username (leave blank to use 'lite'): admin
Email address: admin@qq.com
Password:
Password (again):
Superuser created successfully.
(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
使用配置, 例:
from django.conf import settings
if settings.DEBUG:
# Do something
注意 django.conf.settings
并不是一个模块!— 而是一个对象!所以引入某个单独的设置项是不可能的:
from django.conf.settings import DEBUG # This won't work.
运行时更改设置
不建议在运行时更改设置. 比如, 不要在view中这样用:
from django.conf import settings
settings.DEBUG = True # Don't do this!
自定义配置
没有什么能够阻止您为自己的Django应用程序创建自己的设置。请遵循以下准则:
- 设置名称必须全部大写。
- 不要重新设置已存在的配置项。
对于序列设置,Django本身使用列表,但这只是一个约定