本文只是对于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 把我们的数据传入前端框架中进行展示。

结束…

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐