Django学习笔记
参考https://github.com/phodal/growth-in-action/blob/gh-pages/chapters/chapter1.md
Django应用架构
Django的每一个模块在内部都称之为APP,在每个APP里都有自己的三层结构。
这样做不仅可以在开发的时候更容易理解系统,而且可以提高代码的可复用性——因为每一个APP都是独立的应用,在下次使用时我们只需要简单的复制和粘贴。
说了这么多,还不如从一个hello,world开始。
Django hello,world
###安装Django
安装Django之前,我们可以用virtualenv工具来创建一个虚拟的Python运行环境。环境问题是一个很复杂的问题,在我们使用Python的过程中,我们会不断地安装一些库,而这些库可能会有不同的版本。并且在安装Python库的过程中,我们会遇到权限问题——即我们需要超级用户的权限才能将库安装到系统的环境之下。随后在这个软件的生涯中,我们还需要保证这个项目所依赖的模块不会发生变动。而这些都是很棘手的一些事,这时候我们就需要创建一个虚拟的运行环境,而virtualenv就是这样的一个工具。
####virtualenv
安装Python包我们需要用到pip命令,它是Python语言中的一个包管理工具。如果你没有安装的话,可以使用下面的命令来安装:
curl https://bootstrap.pypa.io/get-pip.py | python
在不同的Python环境中,我们可能需要使用不同的pip,如下所示是笔者使用的Python3的pip命令pip3
pip3 install virtualenv
如果是Python2.7的话,对应会有:
pip install virtualenv
需要注意的是这将会安装到Python所在的目录,如我的目录是:
cd d:\python
在创建我们的这个虚拟环境之前,我们可以创建一个存储所有virtualenv的目录:
mkdir virtualenvs
现在,我们就可以创建一个新的虚拟环境,转到对应的目录下:
cd d:\python\virtualenvs
virtualenv project
通过到相应的目录下执行激活就可以使用这个虚拟环境了:
cd d:\python\virtualenvs\project\Scripts
activate
停止使用只需要执行下面的命令即可:
deactivate
####安装Django
准备了这么久我们终于要开始安装Django了,执行:
###创建项目
在这些命令中startproject可以用于创建项目,在这里我们的项目名是blog,那么我们的命令如下:
django-admin startproject blog
这个命令将创建下面的文件内容,而这些是Django项目的一些必须文件。
.
├── blog
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
blog目录对应的就是blog这个项目,将会放置这个项目的一些相关配置:
- settings.py包含了这个项目的相关配置。如数据库环境、启用的插件等等。
- urls.py即URL Dispatcher的配置,指明了某个URL应该指向某个函数来处理。
- wsgi.py用于部署。WSGI(Python Web Server Gateway Interface,Web服务器网关接口)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
- __init__.py指明了这是一个Python模块。
manage.py 会在每个Django项目中自动生成,它可以和django-admin做类似的事。如我们可以用manage.py来启动测试环境的服务器:
cd D:\python36\virtualenvs\project1\Scripts\blog
python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
March 24, 2016 - 03:07:34
Django version 1.9.4, using settings 'blog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Not Found: /
[24/Mar/2016 03:07:35] "GET / HTTP/1.1" 200 1767
Not Found: /favicon.ico
[24/Mar/2016 03:07:36] "GET /favicon.ico HTTP/1.1" 404 1934
现在,我们只需要在浏览器中打开http://127.0.0.1:8000/,便可以访问我们的应用程序。
###Django后台
Django很适合CMS的另外一个原因,就是它自带了一个后台管理系统。为了启用这个后台管理系统,我们需要配置我们的数据库,并创建相应的超级用户。如下所示的是settings.py中的默认数据库配置:
# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
上面的配置中我们使用的是SQLite3作为数据库,并使用了当前目录下的db.sqlite3
作为数据库文件。Django内建支持下面的一些数据库:
'django.db.backends.postgresql_psycopg2'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
如果我们想使用别的数据库,可以在网上寻找相应的解决方案,如用于支持使用MongoDB的django-nonrel项目。不同的数据库有不同的配置,如下所示的是使用PostgreSQL的配置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
接着,我们就可以运行数据库迁移,只需要运行相应的脚本即可:
python manage.py migrate
Operations to perform:
Apply all migrations: sessions, admin, auth, contenttypes
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying sessions.0001_initial... OK
(growth-django)
在上面的过程中,我们会创建相应的数据库模型,并依据迁移脚本来创建一些相应的数据,如默认的配置等等。
最后,我们可以创建一个相应的超级用户来登陆后台。
python manage.py createsuperuser
Username (leave blank to use 'fdhuang'): root
Email address: h@phodal.com
Password:
Password (again):
Superuser created successfully.
输入相应的用户名和密码,即可完成创建。然后访问 http://127.0.0.1:8000/admin,输入上面的用户名和密码就可以来到后台。