# Django入门笔记2-项目入手
# 安装项目环境
requirement.txt
用于记录项目所安装的包
Django==2.2
django-concurrency==1.4
Pillow==6.2.1
pytz==2019.3
six==1.13.0
sqlparse==0.3.0
psycopg2==2.7.1
2
3
4
5
6
7
安装项目包
pip freeze > requirements.txt
通过django-admin startproject
创建项目
django-admin startproject name
通过python manage.py startapp
创建应用
python manage.py startapp name
项目目录
mysite/
manage.py # 启动server
mysite/ #项目配置目录 django-admin startproject 与项目同名
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
polls/ #项目应用目录 python manage.py startapp 应用名
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
通过修改项目目录下settings.py
的INSTALLED_APPS
为项目添加应用
INSTALLED_APPS = (
... # 内置应用已省略
'polls',
)
2
3
4
项目目录
mysite/
manage.py # 启动server
mysite/ #项目配置目录 django-admin startproject 与项目同名
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
polls/ #项目应用目录 python manage.py startapp 应用名
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 项目路由编写
详细内容见官方文档
在项目文件夹下的urls.py
文件中编写路由
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
2
3
4
5
6
7
Django 3.0 后编写路由无需使用正则表达式了
path('**route访问路由**','**view对应视图**','kwarg','name命名空间')
前两个为必须参数
view 参数可为include( )
,该函数采用完整的 Python 导入路径到达该位置应“包括”的另一个URLconf
模块,admin.site.urls
是唯一例外(admin为内置模块)
path('articles/<slug:title>/<int:section>/', views.section, name='article-section')
<slug:title>/<int:section> 用于限定url中参数类型
2
3
有关URL详细内容参考
# 连接数据库与创建数据模型
通过修改项目目录下settings.py
的
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'demo',
'USER': 'demo',
'PASSWORD': 'demo@12345',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
2
3
4
5
6
7
8
9
10
并按照对应驱动连接数据库(可见后文常见数据库连接)
详细配置参考
通过编写应用目录下models.py
创建模型
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
2
3
4
5
6
7
8
9
10
通过自定义类继承models.Model
实现数据库字段
每一个类代表与一张数据库表一一对应,每一个属性对应着数据库表中的字段
每个字段都是 Field 类的实例,每个模型被表示为django.db.models.Model
类的子类
详细类型及参数参看
同时可以使用 ForeignKey 定义关系,Django 支持所有常用的数据库关系:多对一、多对多和一对一。
初始化数据库与模型
python [manage.py](<http://manage.py/>) migrate
migrate
负责应用和撤销迁移,主要用于数据库创建迁移时操作
python [manage.py](<http://manage.py/>) makemigrations
makemigrations
基于模型的修改创建迁移,主要用于模型创建更改时操作。
# 内置后台管理页面
创建一个管理员账号
创建一个能登录管理页面的用户,运行下面的命令:
python manage.py createsuperuser
键入你想要使用的用户名,然后按下回车键:
然后提示你输入想要使用的邮件地址:
最后一步是输入密码。你会被要求输入两次密码,第二次的目的是为了确认第一次输入的确实是你想要的密码。
Username: admin
Email address: admin@example.co
Password: **********
Password (again): *********
Superuser created successfully.
2
3
4
5
启动开发服务器
python manage.py runserver
登陆页面
管理页面
在管理页面中加入应用功能
在应用目录下的admin.py
中 通过 admin.site.register (模型)
引入模型
from django.contrib import admin
from .models import Question
admin.site.register(Question)
2
3
4
5
详细内容参考官方文档
接下来将介绍 model与数据库 API 以及 基于 Restful Framework 的 Serializer 序列化