Django 安装及基本设置
Django简介
官网:https://www.djangoproject.com
官方文档:https://docs.djangoproject.com
Django安装
- 测试环境:python3.6.3
- Django版本:2.1.7
- pip安装:
pip install django
- 源码安装:
github地址:https://github.com/django/django/releases
下载完成后到解压目录执行:python setup install
- 获取Django版本号:进入python运行环境,执行以下代码:
import django
django.get_version()
Django任务命令行工具
-
Type 'django-admin help <subcommand>' for help on a specific subcommand. Available subcommands: [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runserver sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).
-
manager.py是对django-amin的简单封装。
Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [contenttypes] remove_stale_contenttypes [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver [sessions] clearsessions [staticfiles] collectstatic findstatic runserver
Django项目创建
-
方法一:
工作目录执行:
django-admin startproject mysite
mysite为项目名称,可任意命名- 目录结构1:
工作目录:
mysite: 根目录
manage.py
mysite:__init__.py
settings.py
urls.py
wsgi.py -
方法二:
工作目录执行:
django-admin startproject mysite .
区别在于方法一在项目外层会创建mysite命名的根目录。- 目录结构2:
工作目录:
manage.py
mysite:__init__.py
settings.py
urls.py
wsgi.py -
结果测试:
根目录执行: python manager.py runserver
根目录下生成项目数据库文件db.sqlite3
结果如下则表示成功:Performing system checks... System check identified no issues (0 silenced). You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. February 28, 2019 - 11:12:52 Django version 2.1.7, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
创建应用
Django中具体的功能组件称为‘应用’。
-
方法一:
工作目录中执行
python manager.py startapp blog
创建名为blog
的应用。 -
方法二:
工作目录中执行
django-admin startapp blog
创建名为blog
的应用。 -
目录结构:
工作目录:
mysite: 根目录
blog: blog应用目录
migrations: blog应用数据库表结构
__init__.py
__init__.py
admin.py 注册数据模型,自定义后台管理功能等
apps.py blog应用配置,比如应用后台命名等
models.py blog应用数据模型
tests.py 编写测试文档来测试所建立的应用
views.py 定义函数视图或类视图。mysite: mysite项目目录
__init__.py
settings.py mysite项目初始化设置(包括数据库,应用添加、中间件等)
urls.py mysite项目路由配置(视图函数或应用的url.py文件的映射关系)
wsgi.py Web Server Gateway Interfacemanage.py 项目任务命令工具
db.sqlite3 使用SqlLite3本地数据库时生成的默认数据库文件,名称可以在settings.py文件中定义
settings.py模块
项目配置,如果不配置相关字段默认值在 django/conf/global_settings.py
python manage.py diffsettings
可以查看与默认配置的差异
-
BASE_DIR
项目根目录
如何将多个应用放置到apps目录下:
1. 在于manger.py同级目录下创建apps文件夹。
2. 将已创建的应用文件剪切到apps目录下。
3. 将apps目录插入临时环境变量路径下:sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
。
4. pycharm中可以将apps目录设置为源码路径,右键->Make Director as -> Resource Root。 -
SECRET_KEY
用于安全加密、签名等,不能为空。
创建项目时生成,生成方式如下:\from django.core.management import utils utils.get_random_secret_key()
-
DEBUG
标记
开发模式
或生产环境
,值True | False
。 -
ALLOWED_HOSTS
允许访问的域名或者IP,DEBUG为True时可以为空。
-
INSTALLED_APPS
应用注册,创建的应用配置到这里才能使用
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',]
-
中间件
django请求/响应处理的钩子框架,这是一个轻量级的插件系统,
用于在全球范围内改变django的输入或输出。
django的中间件在settings的MIDDLEWARE列表中配置激活,
中间件有严格的依赖顺序,按列表顺序自上而下的执行。MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]
-
在请求阶段依次执行:
- process_request()
- process_view()
在响应阶段依次执行:
- process_exception()
- process_template_response()
- process_response()
-
-
ROOT_URLCONF
在settings.py文件中通过ROOT_URLCONF指定根级url的配置。
ROOT_URLCONF = 'mysite.urls'
-
'APP_DIRS': True
, 按照app路径下templates路径搜索,
'APP_DIRS': False
, 按照DIRS
字段设置路径搜索,
扩展:Django如何采用jinja2的模板引擎TEMPLATES = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'statics')], 'APP_DIRS': False, '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',], }, },]
-
Django不是完整的web后端框架,它需要和一个WSGI服务器配套,
由WSGI服务器负责网络通讯部分, django依赖wsgi接口创建socket方法。
该项指向 mystie 项目目录下wsgi.py的application方法。
WSGI_APPLICATION = 'mysite.wsgi.application'
-
此项配置数据库引擎
django多数据库联用配置方式DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'OPTIONS': { 'timeout': 20, } }, }
-
配置密码强度验证方式
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
-
LANGUAGE_CODE
语言设置
英语:‘en-us’
中文简体:‘zh-hans’
中文繁体:‘zh-hant’ -
TIME_ZONE
时区设置
世界时间:‘UTC’
中国时间:‘Asia/Shanghai’ -
Internationalization, I18N表示I与N之间有18个字母。
Django是否开启国际化支持 -
USE_L10N
localization, L10N表示L与N之间有10个字母。
Django本地化支持 -
跨时区操作,时间强制转换成UTC时间
国内服务可以设置为False -
静态文件路由
STATIC_URL = '/static/'
-
STATICFILES_DIRS
开发模式静态文件存放路径,
默认情况下静态文件放置在每个应用的static
文件夹下,
如果我们需要将所有静态文件都归类到一个目录,则需要如下配置:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'statics'), ]
-
STATIC_ROOT
生成环境静态文件存放路径
STATIC_ROOT = os.path.join(BASE_DIR, "all_statics")
在部署生成环境时运行python manage.py collectstatic
会把所有静态文件汇聚到该路径下。 -
MEDIA_URL
上传文件路由
MEDIA_URL = '/media/'
-
用户上传目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在FileField、ImageFIled等字段中指定upload_to
字段用于规定文件在MEDIA_ROOT
目录下的位置。
命令回顾
-
创建Django项目
django-admin.py startproject project_name
-
创建应用
python manage.py startapp app_name
或django-admin.py startapp app_name
-
创建数据表
- 创建更改的文件
python manage.py makemigrations
- 将生成的py文件应用到数据库
python manage.py migrate
- 创建更改的文件
-
清空数据表,删除所有数据但保留数据表
python manage.py flush
-
数据库导出,appname不指定则默认导出所有应用的数据库
python manage.py dumpdata [ appname] > data.json
-
数据库导入,不需要指定appname
python manage.py loaddata data.json
-
启动开发服务器
-
一般模式,默认8000端口:
python manage.py runserver
-
当提示端口被占用的时候,可以指定其他端口:
python manage.py runserver 8001
-
设置所有网络可以访问:
python manage.py runserver 0.0.0.0:8000
-
创建超管
python manage.py createsuperuser
-
修改用户密码
python manage.py changepassword username
-
-
进入django项目环境终端
开发过程中如果不清楚运行结果可以通过终端调试
python manage.py shell
-
进入数据库shell环境
python manage.py dbshell