[toc]
# Django实践
[Django](https://www.djangoproject.com/)是一个高级Python Web框架,鼓励快速开发和整洁适用的设计,它由经验丰富的开发人员构建,他们处理了Web开发的许多麻烦,所以你可以专注于自己的APP,而无需重复的造轮子。它是免费开源的。
## 开发环境的搭建 for django@python
操作系统为widows
1. 下载安装python,设置环境变量(添加python安装目录之环境变量PATH)。在命令行输入``python --version ``,回应相应的版本号``python 3.7.2``,表明python安装成功;
2. 下载安装python集成开发环境[PyCharm](https://www.jetbrains.com/pycharm/),使用PyCharm Community Edition,免费的。
新建项目,PyCharm会为每个项目创建一个隔离的Python运行环境(virtualenv,venv),在本项目的venv中安装模块(如django)不会影响到其它项目。
## django应用开发流程之准备工作
1. 新建项目MyDjangoProject,并未该项目新建了venv(virtualenv,虚拟环境);
2. 安装Django模块(在venv虚拟环境下),打开Terminal,输入``pip install django``即可安装;
```
(venv) D:\MyPython\MyDjangoProject>pip install django
Collecting django
...
Successfully installed django-2.1.7 pytz-2018.9
...
```
3. 新建Django项目,mysite
```
(venv) D:\MyPython\MyDjangoProject>django-admin startproject mysite .
```
> 注意新建项目命令的点表示在当前目录下创建该项目;
项目自动创建文件manage.py,该文件将接管该项目的管理工作,查看其支持的命令``python manage.py --help
``
4. 迁移数据库``python manage.py migrate``
5. 启动web服务器,``python manage.py runserver``,在浏览器输入http://127.0.0.1:8000/,即可看到该项目的默认主页;
6. 新建应用程序myapp,``python manage.py startapp myapp``
7. 添加应用myapp至文件settings.py
```
INSTALLED_APPS = [
省略
# my apps
'myapp'
]
```
8. 修改myapp,如这里定义模型,修改models.py,如下:
```
from django.db import models
# Create your models here.
class Topic(models.Model):
'''用户学习的主题'''
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
'''返回模型的字符串表示'''
return self.text
```
9. 对myapp调用makemigrations,``python manage.py makemigrations myapp``
10. 项目迁移,``python manage.py migrate``
> 每次修改应用myapp后,需要重复第9、10步
11. Django提供了后台管理网站(http://127.0.0.1:8000/admin/),在这里可以查看新定义的模型,不过初次登录时需要超级管理员身份。现在注册超级管理员,``python manage.py createsuperuser``,我注册的超级管理员为admin/admin;
12. 至此就可以登录django的后台管理网站,但是没有发现自己定义的模型Topic,这是因为自定义的models须自己注册,注册后再次登录后台管理软件即可看到myapp下的Topic;
## Django web应用开发
上节的准备工作做好之后,就可以正式进行web应用开发了。下面举例说明。
1. 定义模型Entry,在文件models:
```
class Entry(models.Model):
'''某个主题的具体知识'''
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
text = models.TextField()
dateadded = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
'''返回模型的字符串表示'''
return self.text[:50]
```
2. 迁移模型Entry,按上节第9、10步骤,生成了新的迁移文件0002_entry.py,
```
python manage.py makemigrations myapp
python manage.py migrate
```
3. 向管理网站注册Entry,在
文件admin.py
```
from django.contrib import admin
# Register your models here.
from myapp.models import Topic, Entry
admin.site.register(Entry)
```
4. 至此,超级用户可以在后台添加主题,添加文章并把文章关联到主题;
## 创建网页
创建网页分三步:
* 定义URL
* 编写视图
* 编写模板(网页)
下面举例说明网页的创建过程,该例需要创建主页、主题页面和文章页面。
1. 定义URL,编辑mysite/urls.py,新建并编辑myapp/urls.py,如下:
mysite/urls.py
```
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('myapp.urls', 'myapp'), namespace='myapp')),
]
```
myapp/urls.py
```
from django.conf.urls import url
from . import views
urlpatterns = [
# 主页
url('^$', views.index, name='index'),
]
```
2. 编写视图
myapp/views.py
```
from django.shortcuts import render
# Create your views here.
def index(request):
'''网站的主页'''
return render(request, 'myapp/index.html')
```
3. 编写模板(网页)
新建myapp/templates/myapp/index.html
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是myapp</title>
</head>
<body>
<p>个人博客DEMO</p>
<p>
用Django构建一个个人博客网站。
</p>
</body>
</html>
```
4. 添加网页的搜索路径,否则找不到该网页
mysite/settings.py
```
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR,'myapp/templates/')],
},
]
# 调试用,这里其输出为:myapp's base directory: D:\MyPython\MyDjangoProject
print("myapp's base directory: ", BASE_DIR)
```
至此输入 **127.0.0.1/8000** 就可以看到index这个网页了!
## 创建网页应用总结
Django有意将创建网页的过程分开,分别处理URL、视图和模板(网页),这样在项目很大时可以让参与者专注自己擅长的方面,例如,数据库专家可以专注于模型,程序员可以专注于视图代码,Web设计人员可以专注于模板。
## 参考
* [Django与AJAX实现网页动态数据显示](https://blog.csdn.net/mildddd/article/details/79800721)
# 部署django项目