本文只是对于Django框架各个组件的作用进行了解,梳理了整个的开发流程。
Django 框架介绍
- Django 是一个开源的Web应用框架
- 最初用于管理劳伦斯出版集团旗下的一些以新闻为主题的网站
- 2005年7月在BSD许可证下发布
MTV 框架模式
- 模型(Model)
- 模板(Template)
- 视图(Views)
Django 的特点
- 采用了MTV的框架模型
- 强调快速开发和代码复用DRY(Do Not Repeat Yourself)
- 组件丰富:
ORM(对象关系映射)映射类来构建数据模型
URL支持正则表达式
模板可以继承
内置用户认证,提供用户认证和权限功能
admin 管理系统
内置表单模型、Cache 缓存系统、国际化系统等
Django的版本
Django最新3.0版本,目前比较多的是2.2.13(LTS:长期支持)
安装:
$pip install --upgrade django==2.2.13
在python里面导入
>>>import django
>>>django.__version__
'2.2.13'
创建Django项目
命令:
$ django-admin startproject MyDjango
目录结构:
MyDjango/
MyDjango/manage.py #命令行工具用来管理项目。 python manage.py help 可以看到它的使用帮助。
MyDjango/MyDjango/__init__.py
MyDjango/MyDjango/settings.py #项目的配置文件
MyDjango/MyDjango/urls.py
MyDjango/MyDjango/wsgi.py
创建Django 应用程序
$ python manage.py help #查看该工具的具体功能
$ python manage.py startapp index
目录结构:
index/admin.py 管理后台
index/apps.py 当前app配置文件
index/migrations/ 数据库迁移文件夹
index/models.py 模型*
index/tests.py 自动化测试
index/views.py 视图*
启动和停止Django应用程序
$ python manage.py runserver #默认是127.0.0.1:8000
$ python manage.py runserver 0.0.0.0:80 #指定监听端口
Quit the server with CONTROL-C
$ CONTROL-C #结束运行
Django 的配置文件
配置文件包括:
- 项目路径
- 密钥
- 域名访问权限
- App 列表
- 静态资源,包括 CSS、JavaScript 图片等
- 模板文件
- 数据库配置
- 缓存
- 中间件
settings.py
"""
Django settings for MyDjango project.
Generated by 'django-admin startproject' using Django 2.2.13.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
#### 项目路径
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#### 密钥
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'p*d7^ue2xmk+1d(5!jk_1^lk2r1jf%!+@)k3!)hjo3(c%mygsu'
#### 调试模式
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
#### 域名访问权限
ALLOWED_HOSTS = []
#### App列表
# Application definition
INSTALLED_APPS = [
#### 内置的后台管理系统
'django.contrib.admin',
#### 内置的用户认证系统
'django.contrib.auth',
#### 所有model元数据
'django.contrib.contenttypes',
#### 会话,表示当前访问网站的用户身份
'django.contrib.sessions',
#### 消息提示
'django.contrib.messages',
#### 静态资源路径
'django.contrib.staticfiles',
#### 注册自己的APP
'index',
]
#中间件和APP列表的顺序是不能随便修改的,自定义app要放在后面,除非是替换默认的功能。
#### 中间件是request和response对象之间的钩子
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',
]
#指定urlconf的位置
ROOT_URLCONF = 'MyDjango.urls'
TEMPLATES = [
{
#### 定义模板引擎
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#### 设置模板路径
'DIRS': [],
#### 是否在App里查找模板文件
'APP_DIRS': True,
#### 用于RequestContext上下文的调用函数
'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',
],
},
},
]
WSGI_APPLICATION = 'MyDjango.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
#### 数据库配置,默认是sqlite,Django2.2使用mysqlclient或pymysql模块连接MySQL
#所以我们需要安装mysqlclient或pymysql模块
# pip install mysqlclient
# pip install pymysql
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
#要知道mysql客户端的位置
# export PATH=$PATH:/usr/local/mysql/bin
# OSError: mysql_config not found
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': 'rootroot',
'HOST': '127.0.0.1',
'PORT': '3306',
}
# 生产环境有可能连接第二个数据库
# 'db2': {
# 'ENGINE': 'django.db.backends.mysql', #连接数据库引擎
# 'NAME': 'mydatabase',
# 'USER': 'mydatabaseuser',
# 'PASSWORD': 'mypassword',
# 'HOST': '127.0.0.1',
# 'PORT': '3307',
# }
}
#密码验证
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
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',
},
]
#时区根据实际情况修改
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
#静态文件目录
STATIC_URL = '/static/'
开发前需要做哪些准备
1、先分析需要实现哪些功能
2、需要知道想要展示的内容,方便定制View视图
3、需要知道通过什么样的url来访问网站,定制urlconf
使用Django开发的流程
1、定义urlconf,可以使用include,在单独的APP应用程序里面创建urlconf文件
2、设置url的匹配规则,并绑定对应的View 视图,以便不同的url访问不通的视图。
3、对视图作相应的处理,使用ORM API连接数据库并获取数据库内容,并把获取到的内容赋值给变量,传递到tempalets中对应的模板文件作相应的处理,把最终结果展示给用户。
urlconf配置
我们在settings配置文件中ROOT_URLCONF = 'MyDjango.urls'
配置项指定了url的文件位置,默认不需要修改,在该文件中我们可以设置url匹配规则。
MyDjango/urls
from django.contrib import admin
from django.urls import path ,include
urlpatterns = [
path('admin/', admin.site.urls),
path('douban/', include('Douban.urls')),
]
admin/
是默认就有的douban/
是我加的,当我们的url地址为ip:port/douban/*
时就需要去找Douban这个APP里面的urls文件了,我们使用了include
来实现。我们需要把我们的APP注册到Django,在settings文件里面进行配置。
Douban/urls
from django.urls import path
from . import views
urlpatterns = [
path('index', views.books_short),
]
当我们的url为ip:port/douban/index
时将匹配成功,转而调用views视图。在视图中定义我们访问的内容。
url的匹配过程:
1、当Django接收到一个请求后,会去找settings配置文件中的ROOT_URLCONF配置项,这里指定的是urls的文件位置。
2、在该文件里面以此匹配每个url模式,在与请求的 URL 匹配的第一个模式停下来。Djagno 导入并调用相关的视图。
3、如果使用include导入了APP应用程序的urls文件,需要去找这个文件进行匹配,匹配成功导入并调用相关的视图。
最后url的匹配规则还使用变量、正则、自定义。
View 视图的编写
from django.shortcuts import render
from django.shortcuts import redirect
# Create your views here.
from django.http import HttpResponse
def books_short(request):
return HttpResponse("Hello Django!")
根据上面的url配置,访问ip:port/douban/index
时将返回"Hello Django!"
我们可以在settings文件中配置数据库信息,在models文件中定义数据库的的表结构,在目标数据库中创建我们需要的表,用于存放网站产生的数据。也可以在该models文件中定义已经存在的表,我们可以结合view把表中数据取出来,再结合Templates 把我们的数据传入前端框架中进行展示。
结束…