
# P02 创建 Django 项目和 APP

## **前提条件**
### **安装 django**

`pip install django`

## **创建第一个Django项目**

### **创建项目**

`django-admin startproject projectname`


其中 `projectname` 指的是你的项目名字

### **创建 APP**  

- **需要当前目录下含有 manage.py 文件**

  `python manage.py startapp appname`  

- **已安装django即可使用**  
  
  `django-admin startapp appname`

其中 `appname` 指的是你的应用名字

创建完成后，需要到 `settings.py` 中注册，将在后续介绍

这将创建一个名为 appname 应用目录，其展开的样子如下所示：:

- appname/
  
  - \_\_init__.py
  
  - models.py

  - tests.py

  - views.py



### **更新应用文件下apps.py文件**

* 此处我们在在项目目录中新建名为apps的文件夹储存后面的app应用，也可以直接创建app应用  

* cd 到apps文件夹目录下  


* 运行 `django-admin startapp appname` 创建应用，此处我们创建`data`应用


* 打开 apps 下 apps.py 文件  


 * 将 name 变量赋值修改  



  ![image](\assets\data_apps.png)


## **项目组成**　　‍

  在运行创建项目命令后项目自动生成了  

  - 项目名文件夹  


  - 子目录下同名子文件夹  


  - manage.py 文件  


  
  manage.py 提供了一种命令行工具，允许你以多种方式与该 Django 项目进行交互。如：`python manage.py help` ，能列出它所能做的事情。注意，此文件一般情况下不需要改动。


### **子目录文件组成**

* **\_\_init__.py**： 是一个空文件，作用是所在的这个目录可以被当作包使用。

* **settings.py**：该 Django 项目整体配置文件。（该文件非常重要，建议认真理解这个文件中可用的设置类型及其默认值。）

* **urls.py**：Django 项目的 URL 设置。可视其为你的 Django 网站的目录。

* **asgi.py** 与 **wsgi.py**：常见的网关接口协议：CGI，FastCGI，WSGI，ASGI。asgi.py 是异步服务器网关接口项目配置文件。ASGI 描述了 Python Web 应用程序和Web服务器之间的通用接口。与 WSGI 不同的是，ASGI允许每个应用程序有多个异步事件。另外，ASGI 支持同步和异步应用程序。开发人员可以将原有的同步 WSGI Web 应用程序迁移到 ASGI ，也可以使用 ASGI 构建新的异步Web应用程序。

### **目录定义补充**

在应用目录下由以下组成
- \_\_init__.py  


- admin.py  
- apps.py  
- models.py
- tests.py
- views.py
- migrations 文件夹

**\_\_init.py__** 是一个空文件，作用同前。

**admin.py** 文件跟网站的后台管理相关。

**models.py** 文件跟数据库操作相关。主要用一个 Python 类来描述数据表。运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的 SQL 语句。

**views.py** 包含了页面的业务逻辑，接收浏览器请求，进行处理，返回页面操作相关。

**tests.py** 文件用于开发测试用例，在实际开发中会有专门的测试人员使用。

**apps.py** 文件是 Django1.10 之后增加的，通常里面包含对应用的配置。

**migrations** 是 Django 1.8 之后推出的 migrations 机制，使 Django 数据模式管理更容易。migrations 机制有两个指令，makemigrations 和 migrate。makemigrations 指令是用 models.py文件 里面的model 和当前的 migrations 代码里面的 model 做对比，如果有新的修改，就生成新 migrations 代码。migrate 指令是用 migrations 目录中代码文件和 Django 数据库 django_migrations 表中的代码文件做对比，如果表中没有，那就对没有的文件按顺序及依赖关系做 migrate apply ，然后再把代码文件名加进 migrations 表中。在目录中自动生成了 \_\_init__.py 文件。

### 课后习题：
[课后练习题](/contents/P13.md#1-python-虚拟环境创建)
