Django入门知识总结

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
django ## 项目名
├─ app ## 功能部件,一个项目里面可以有多个app,所有的APP共享项目资源
│ ├─ __init__.py
│ ├─ admin.py
│ ├─ apps.py
│ ├─ migrations ## 数据库迁移记录
│ │ └─ __init__.py
│ ├─ models.py ## 模型定义文件,和数据库模型相关的代码
│ ├─ tests.py
│ └─ views.py ## 视图文件
├─ django #与项目同名的文件夹
│ ├─ __init__.py
│ ├─ __pycache__
│ │ ├─ __init__.cpython-37.pyc
│ │ └─ settings.cpython-37.pyc
│ ├─ settings.py //主配置文件
│ ├─ urls.py //url路由文件
│ └─ wsgi.py
└─ manage.py //Django管理主程序

项目搭建过程

使用虚拟环境 Virtualenv

安装virtualenv

win+r打开控制台输入cmd

输入pip install virtualenv

进入一个希望创建虚拟python环境的文件夹下面,创建一个虚拟环境(此处为venv)

1
2
cmd>D:>cd virtualenv 
cmd>D:\virtualenv>virtualenv venv

(本机虚拟环境已建在C:/users/joy/django下)

在pycharm中打开setting添加本地python环境

2

选择刚刚创建的虚拟环境

3

开启关闭virtualenv

进入venv目录

激活 :

1
cmd>D:\virtualenv\venv>Scripts\activate

关闭 :

1
(venv) D:\virtualenv\venv>deactivate

4

注意

virtualenv 创建的虚拟环境与主机的 Python 环境完全无关,

你主机配置的库不能在 virtualenv 中直接使用。

你需要在虚拟环境中利用 pip install 再次安装配置后才能使用。

参考文章

windows下使用pycharm配置python的virtualenv环境

创建app

在pycharm下方的terminal终端中输入命令:

1
python manage.py startapp cmdb

这样就创建了一个叫做cmdb的APP,django自动生成“cmdb”文件夹。

创建的app需要在settings.py里注册:

1
2
3
4
5
6
7
8
9
10
11
# Application definition

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb',
)

创建MySQL数据库

在pycharm中打开File->Settings,在左边栏找到当前项目,选择Project Interpreter

点击右边栏右上角的加号:

1

搜索pymsql,在点击左下角的Install Package

在settings.py中的DATABASES下填写数据库信息,例:

1
2
3
4
5
6
7
8
9
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx', # 库名
'USER': 'xxx', # 用户名
'PASSWORD': 'xxx', # 密码
'HOST': 'xxx', # 数据库主机ip
}
}

settings.py设置

将settings.py中的:

1
2
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

改成

1
2
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

让Django支持中文

pycharm终端命令

启动服务

1
python manage.py runserver

数据迁移

1
2
3
#设置好自定义用户模型后,生成数据库迁移文件,并且迁移数据库以生成各个应用必要的数据库表
python manage.py makemigrations
python manage.py migrate

跨域问题

须要在Django层注入header,用Django的第三方包django-cors-headers来解决跨域问题:

1
pip install django-cors-headers

settings.py 修改:

1
2
3
4
5
6
7
8
9
10
11
12
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True

注意中间件的添加顺序

集成vue,实现前后端分离

在前端项目中执行npm run build,前端项目下会生成一个dist文件夹

把前端项目文件夹(例如onehome)放到Django项目(onehomeServer)里

修改django的settings文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['onehome/dist'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

# Add for vuejs
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "onehome/dist/static"),
]

修改django的主目录的urls文件:

1
2
3
4
5
6
7
from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic import TemplateView
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', TemplateView.as_view(template_name="index.html")), ## 这里将url的根路径指向vue中的index页面
]

启动django服务,访问localhost:8000 则可以出现vue的首页。

插件

django-extensions

可检查urls是不是已经被添加

安装:pip install django-extensions

将’django_extensions’添加到settings.py的INSTALLED_APPS中

然后列出所有urls:python manage.py show_urls