走进Django

认识Django

1、Django简介

  Django是一个开放源代码的Web应用框架,由Python写成,最初用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件,于2005年7月在BSD许可证下发布,这套框架是以比利时的吉卜赛爵士吉他手Django Reinhardt来命名的。Django采用了MTV的框架模式,即模型(Model)、模板(Template)和视图(Views),三者之间各自负责不同的职责。

  • 模型,数据存取层,处理与数据相关的所有事务,例如数据存取、验证有效性、数据之间的关系等。
  • 视图,业务逻辑层,处理与表现层相关的决定,存取模型及调取恰当模板的相关逻辑,模型与模板的桥梁。
  • 模板,表现层,负责页面展示,例如用户看到的网站页面。

  Django的主要目的是简便、快速地开发数据库驱动的网站。它强调代码复用,多个组件可以很方便地以插件形式服务于整个框架,Django有许多功能强大的第三方插件,可以很方便地开发出自己的工具包。

2、安装Django

  Django的安装很简单,语法如下:

pip install Django

安装完之后可以通过一下语句查看是否安装成功。因为我安装的是3.2.12版本,所以有如下显示。

import django
django.__version__
'3.2.12'

Django创建项目

  一个项目可以理解为一个网站,创建Django项目可以在CMD窗口输入创建指令完成。也可以直接在PyCharm中完成。

1、命令行创建项目

  在CMD窗口下输入项目创建指令:

 cd C:\Users\admin\Desktop\python
 django-admin startproject MyDjango

  第一行命令是跳转到指定文件夹,第二行即为创建项目的指令,其中MyDjango是自定义的文件夹名称。运行完之后会在相应路径出现MyDjango文件夹,里面包括两部分,一个是MyDjango的文件夹(包含多个py文件),一个是manage.py文件。
项目文件说明:

  • manage.py:命令行工具,允许以多种方式与项目进行交互。在CMD窗口下,将路径切换到MyDjango项目并输入python manage.py help,可以查看该工具的具体功能。
  • _init.py:初始化文件,一般情况下无须修改。
  • settings.py:项目的配置文件,具体配置说明会在后面详细讲述。
  • urls.py:项目的URL设置,可理解为网站的地址信息。
  • wsgi.py:全称为Python Web Server Gateway Interface,即Python服务器网关接口,是Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改。

  完成项目的创建后,接着创建项目应用,项目应用简称为App,相当于网站的功能,每个App代表网站的一个或多个网页。App的创建由文件manage.py实现,创建指令如下:

cd MyDjango
python manage.py startapp index
python manage.py startapp user

  上述语句新建了index和user文件夹,其分别代表网站首页和用户中心,具体名字和应用根据实际命名创建。在两个文件夹中又包含多个py文件。具体说明如下:

  • migrations文件夹:用于数据库数据的迁移(若不存在,在建数据库时自己创建)。
  • __init__.py:初始化文件。
  • admin.py:当前App的后台管理系统。
  • apps.py:当前App的配置信息,一般情况下无须修改。
  • models.py:定义映射类关联数据库。
  • tests.py:自动化测试的模块。
  • views.py:逻辑处理模块,即MTV里面的视图(Views)。

  完成项目和App的创建后,最后在CMD窗口输入以下指令启动项目:

cd MyDjango 
python manage.py runserver 80

  首先将路径切换到项目的路径,然后输入python manage.py runserver 80,其中80是端口号,如果不设置端口,默认为8000,最后在浏览器上输入http://127.0.0.1:80/
可看到项目的启动情况。情况如下:
在这里插入图片描述
  当然还可以通过指定具体的IP和端口号启动Django项目,结果如上图,只是IP和端口号不一致。

python manage.py runserver IP地址:端口号

这里需要说明的是,可能在运行的时候出现以下问题:


You have 18 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.
December 11, 2021 - 10:55:01
Django version 4.0, using settings 'Django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

解决方法:按下ctrl+c退出terminal运行的程序,输入下面代码,等待配置完成,重新加载项目就不会再报错了。

python manage.py migrate

2、PyCharm 搭建开发环境

需要注意的是,这里说的PyCharm是指其专业版,而社区版并不支持Django。

  除了在CMD窗口创建项目之外,还可以在PyCharm下创建项目,配置过程如下:

  1. 打开PyCharm并在左上方单击File→New Project创建新项目:
    在这里插入图片描述

  2. 选择Django,选择好路径和环境即可生成Django项目。

  3. 接着创建App,可以在PyChram的Terminal中输入创建指令,创建指令与在CMD窗口下输入的相同,分别创建网站首页和用户中心。
    在这里插入图片描述

  4. 启动项目:如果项目是由PyCharm创建的,则直接点击运行按钮;如果项目是由CMD窗口创建的,想要在PyCharm启动项目,就需要对该项目进行配置。
    在这里插入图片描述

Django 配置信息

1、基本配置

  项目配置是根据实际开发需求从而对整个Web框架编写相关配置信息。配置信息主要由项目的settings.py实现,主要配置有项目路径、密钥配置、域名访问权限、App列表、配置静态资源、配置模板文件、数据库配置、中间件和缓存配置。
  settings.py是创建项目时自动生成,这里对其中的项目路径BASEDIR、密钥配置SECRETKEY、调试模式DEBUG、域名访问权限ALLOWED_HOSTS和App列表INSTALLED_APPS,各个配置说明如下。

 项目路径BASEDIR:主要通过os模块读取当前项目在系统的具体路径,该代码在创建项目时自动生成,一般情况下无须修改。
 密钥配置SECRETKEY:是一个随机值,在项目创建的时候自动生成,一般情况下无须修改。主要用于重要数据的加密处理,提高系统的安全性,避免遭到攻击者恶意破坏。密钥主要用于用户密码、CSRF机制和会话Session等数据加密。

  • 用户密码:Django内置一套用户管理系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性。
  • CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求.
  • 会话Session:Session的信息存放在Cookies,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。

 调试模式DEBUG:该值为布尔类型。如果在开发调试阶段应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统。如果项目部署上线,应将其改为False,否则会泄漏系统的相关信息。
 域名访问权限ALLOWED_HOSTS:设置可访问的域名,默认值为空。当DEBUG为True并且ALLOWEDHOSTS为空时,项目只允许以localhost或127.0.0.1在浏览器上访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS=['*1]。
 App列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和session等配置信息,这些都是Django内置的应用功能,各个功能说明如下。

  • admin:内置的后台管理系统。·auth:内置的用户认证系统。
  • contenttypes:记录项目中所有model元数据(Django的ORM框架)。
  • sessions;Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
  • messages:消息提示功能。 ·staticfiles:查找静态资源路径。

 如果在项目创建了App,必须在App列表INSTALLED_APPS添加App名称。
例如开始例子中的app,需要将MyDjango项目已创建的App添加到App列表,代码如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'index',
    'user',
]

2、静态资源

  静态资源指的是网站中不会改变的文件。在一般的应用程序中,静态资源包括Css文件、JavaScript文件以及图片等资源文件。
  一个项目在开发过程中肯定需要使用CSS和JavaScript文件,这些静态文件的存放主要由配置文件settings.py设置,配置信息如下:(创建项目时自己生成

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

  上述配置将静态资源存放在文件夹static,而文件夹static只能放在App里面。所以只需要把相应的文件放在对应app的static文件夹下。启动项目程序后,在浏览器上分别输入地址项目地址加文件路径(htp:/127.0.0.1:8000/static/pic.png),就可以看到静态资源的内容展现在浏览器上。
  除此之外,静态资源配置还有STATIC_ROOT,其作用是方便在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。STATIC_ROOT配置如下:

STATIC_ROOT=os.path.join(BASE_DIR, 'all_static')

  STATIC_ROOT用于项目生产部署,在项目开发过程中作用不大,关于STATIC_ROOT后面再细讲。

3、模板路径

  在Web开发中,模板是一种较为特殊的HTML文档。这个HTML文档嵌入了一些能够让Python识别的变量和指令,然后程序解析这些变量和指令,生成完整的HTML网页并返回给用户浏览。模板是Django里面的MTV框架模式的T部分,配置模板路径是告诉Django在解析模板时,如何找到模板所在的位置。创建项目时,Django已有初始的模板配置信息,在settings.py文件中,内容如下所示:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

  模板配置是以列表格式呈现的,每个元素具有不同的含义,其含义说明如下。

  • BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。
  • DIRS:设置模板所在路径,告诉Django在哪个地方查找模板的位置,默认为空列表。
  • APP_DIRS:是否在App里查找模板文件。
  • OPTIONS:用于填充在RequestContext中上下文的调用函数,一般情况下不做任何修改。
      模板配置通常配置DIRS的模板路径即可。在项目的根目录和index下分别创建templates文件夹,并在文件夹下分别创建文件index.html和app_index.html,建好之后配置如下:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS':[ os.path.join(BASE_DIR, 'templates'), 
        		 os.path.join(BASE_DIR, 'index/templates')],
        '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',
            ],
        },
    },
]

4、数据库配置

  数据库配置是选择项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据库的连接,Django提供4种数据库引擎:

django.db.backends.postgresql'
django.db.backends.mysq1'
django.db.backends.sqlite3'
django.db.backends.oracle'

  项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用于嵌入式系统开发,而且占用的资源非常少。Sqlite3数据库配置信息如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

  但是现在有些项目用Mysql或者其他数据库,则只需要下载相应的数据库,然后进行如下配置,以Mysql为例,其他数据库配置大同小异:

DATABASES={
		'default':{
			'ENGINE': 'django.db.backends.mysq1', 
			'NAME': 'django _db',
			'USER': 'root', 
			'PASSWORD': '1234', 
			'HOST': '127.0.0.1', 
			'PORT1: 13306',
    }
}

  上面的例子都是配置一个数据库的情况,也可以配置多个数据库,配置代码如下:

DATABASES={
		'default':{
			'ENGINE': 'django.db.backends.mysq1', 
			'NAME': 'django _db',
			'USER': 'root', 
			'PASSWORD': '1234', 
			'HOST': '127.0.0.1', 
			'PORT1: 13306',
    },
    'MyDjango':{
			'ENGINE': 'django.db.backends.mysq1', 
			'NAME': 'django _db',
			'USER': 'root', 
			'PASSWORD': '1234', 
			'HOST': '127.0.0.1', 
			'PORT1: 13306',
    },
    'My_sqlite3':{
			'ENGINE': 'django.db.backends.sqlite3', 
			'NAME': BASE_DIR / 'db.sqlite3',
    }
     
}

  值得注意的是,本文是以MySQL的5.7版本为例进行介绍的。如果读者使用的是5.7以上的版本,在Django连接MySQL数据库时会提示django.db.utils.OperationalError的错误信息,这是因为MySQL8.0版本的密码加密方式发生了改变,8.0版本的用户密码采用的是cha2加密方法。
为了解决这个问题,我们通过SQL语句将8.0版本的加密方法改回原来的加密方式,这样可以解决Django连接MySQL数据库的错误问题。在MySQL的可视化工具中运行以下SQL语句:

#newpassword是我们设置的用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysq1_native_password BY newpassword';
FLUSH PRIVILEGES;

5、中间件

  中间件(Middleware)是处理Django的request和response对象的钩子。当用户在网站中进行单击某个按钮等操作时,这个动作是用户向网站发送请求(request);而网页会根据用户的操作返回相关的网页内容,这个过程称为响应处理(response)。从请求到响应的过程中,当Django接收到用户请求时,Django首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。
  一般情况下,Django默认的中间件配置均可满足大部分的开发需求。在项目的MIDDLEWARE中添加LocaleMiddleware中间件,使得Django内置的功能支持中文显示,代码如下:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    #使用中文
	'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

  配置属性MIDDLEWARE的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件很容易导致程序异常。每个中间件的说明如下:

  • SecurityMiddleware:内置的安全机制,保护用户与网站的通信安全。
  • SessionMiddleware:会话Session功能。
  • LocaleMiddleware:支持中文语言。
  • CommonMiddleware:处理请求信息,规范化请求内容。
  • CsrfViewMiddleware:开启CSRF防护功能。
  • AuthenticationMiddleware:开启内置的用户认证系统。
  • MessageMiddleware:开启内置的信息提示功能。
  • XFrameOptionsMiddleware:防止恶意程序点击劫持。
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值