Django初始配置

摘要:

本次使用的开发环境是Python3.8和Django4.1,使用的解释器为Pycharm。记载Django开发所需记住的要点以及基础设置,方便以后的学习回顾。

一、命令行创建Django项目:

使用CMD命令在指定盘符下面使用命令创建项目:

D:\>Django-admin startproject 项目名称

创建完成后会有一个项目文件夹,文件夹里面会包含5个py文件。项目中每个文件的说明如下:

  • manage.py:命令行工具,在项目中输入python manage.py help,可以查看这个工具的指令信息。
  • init.py:初始化文件,一般情况下不用做修改,文件夹下面存在的话,在Python中表示是一个包。
  • asgi.py:用于启动异步通信服务,比如实现在线聊天等异步通信功能。
  • settings.py:项目的配置文件,项目的所有功能都要在这个文件中配置。
  • urls.py:项目的路由设置,设置网站的具体网站内容。
  • wsgi.py:全称为Python Web Server Gateway Interface,即Python服务器网关接口,是Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改。

完成项目的创建之后还需要创建项目应用,项目应用简称App,相当于网站的功能,可以创建多个App,一个App则代表一个功能。App的创建由文件manage.py实现,创建的指令是:

python manage.py startapp App名称

一般创建网站App使用index命名代表网站的首页。创建App之后下面会有多个py文件和migrations文件夹,说明明如下:

  • migrations:用于生成数据迁移文件,通过数据迁移文件可自动在数据库里面生成相应数据表。
  • init.py:App文件下的初始化文件。
  • admin.py:用于设置当前App的后台管理功能。
  • apps.py:当前App的配置信息,一般情况下无需更改。
  • models.py:定义数据库的映射类,每个类可以关联一张数据表,实现数据持久化,即MTV里面的模型(Models)。
  • tests.py:自动化测试的模块,用于实现单元测试。
  • views.py:视图文件,处理功能的业务逻辑即MTV里面的视图(Views)。

完成项目和App的创建之后,里面创建的templates文件夹用于存放HTML模板文件,可以在终端里面输入下面的指令启动项目:

python manage.py runserver 8001

其中后面的数字是设置的端口号,如果指令没有设置端口号,则默认(缺省值)使用端口号8000。

二、Pycharm创建Django项目:

使用Pycharm专业版创建项目则简单方便许多,只需要在Pycharm文件里面点击新建项目选择Django则可以直接创建Django项目。

1、创建项目之后注意要将前端的js文件存放在指定的文件夹中,为了项目更好的区分后端文件和前端文件,这一步是Python开发网站必备的,即便是Flask微框架也要区分前端和后端文件。

2、在Django中可以自行创建文件夹mediapstatictemplates等等文件夹。在其中添加我们项目需要的HTML静态文件。对这里面创建的文件进行解释:

  • media:里面可以创建details、imgs等文件夹。
  • pstatic:里面创建的文件夹分别是css、img、js和layui(框架的源码文件)存放前端静态文件以及图片。
  • templates:用于存放前端的模板文件,项目所有的模板文件都存放在此处。

3、至此完成基本的Django项目的设置,setting.py的详细配置在下面会说到。

  1. 使用指令创建Django项目,并在新建的项目下创建对应项目应用(App)。
  2. 根据前端提供的HTML静态模板,分别创建文件夹media、patatic、templates,并将HTML静态模板的CSS、Javascript和HTML文件分别放置在文件夹pstatic和templates。

三、项目的基础功能设置

1、由于文件夹media、pstatic和templates是我们自行创建的,Django在运行的途中是无法识别到有些文件的具体作用,因此我们需要在Django的配置文件setting.py中添加这些文件夹,让Django能识别到这些文件夹的作用。

2、项目开发调试阶段在settings.py中DEBUG的值为布尔值:True。如果项目部署上线则应该将其改为False以防止项目相关信息的泄露。

image

3、ALLOWED_HOSTS:设置可访问的域名,默认值就是空列表。当DEBUG=True且ALLOWED_HOSTS为空列表,项目则只能以localhost或127.0.0.1在浏览器当中访问。而当DEBUG=False的时候则ALLOWED_HOSTS为必填项,否则项目无法启动,如果想让项目允许所有域名访问,可以将ALLOWED_HOSTS的值设置为=["*"]

4、INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和session等配置信息,这些都是Django内置的应用功能,各个功能的配置说明如下:

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

5、中间件MIDDLEWARE:这是用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,,它是一个轻量的、低级别的插件系统,用于在全局方位内改变Django的输入和输出。

6、路由入口设置ROOT_URLCONF:告诉Django从哪个文件查找整个项目的路由信息(路由信息即我们定义的网址信息),默认值是与项目同名的文件夹的urls.py文件,即项目名文件下的urls.py。

7、模板配置TEMPLATES:主要配置项目的解析引擎、模板的存放地址以及Django内置功能模板的配置信息。

image

8、WSGI配置WSGI_APPLICATION:告诉Django如何查找WSGI文件,并从WSGI文件启动并运行Django系统服务,默认值是与项目名同名的文件夹的wsgi.py文件即,项目文件夹下wsgi.py文件。

9、数据库配置DATABASES:配置数据的连接信息,如连接数据库的模块、数据库的名称、数据库账号密码等,默认连接自带的sqlite数据库,自己设置则按照下图要求:

image

10、内置的Auth认证功能配置AUTH_PASSWORD_VALIDATORS:主要实现Django的Auth认证系统的内置功能(一般使用默认值即可)。

11、国际化即本土化配置:包含配置属性LANGUAGE_CODE、TIME_ZONE、USE_I18N、USE_TZ,主要实现网站德语言设置、不同时区的时间设置等等。

12、静态资源配置STATIC_URL:设置静态文件的路径信息。

注:在网站开发阶段中,我们经常对配置文件settings.py和INSTALLED_APPS、MIDDLEWARE、TEMPLATES、DATABASES和TATIC_URL进行配置从而完成网站的开发过程,而配置属性DEBUG和ALLOWED_HOSTS则用于网站的上线阶段。根据开发的实际情况可以增减相应的功能配置。


四、项目的功能结构配置

1、在项目当中添加了注册的应用App。但是在Django运行当中无法识别新添加的项目应用App,因此还需要在Django的配置文件settings.py中的INSTALLEND_APPS分别添加新创建的App,不同考虑添加顺序,一般情况下新增的项目应用写在INSTALLED_APPS末端,并以字符串表示。

2、在Web开发过程中,模板是一种较为特殊的HTML文档。在这个HTML文档里面面嵌套了一些Django能够识别的变量和指令,然后由Django的模板引擎解析这些变量和指令,生成完整的HTML网页并返回给用户进行浏览。模板是Django中MTV框架模式的T部分,配置模板文件路径是为了告诉Django在解析模板时,如何找到模板所在的位置。

image

模板配置以列表进行展示,每个元素具有不同的含义,其含义的说明如下:

  • BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。
  • DIRS:设置模板所在的路径,告诉Django在哪个地方查找模板的位置,默认为空列表。
  • APP_DIRS:是否在APP里面查找模板文件。
  • OPTIONS:用于填充在RequestContext的上下文(模板里面的变量和指令),一般情况下不做任何修改。

注:模板文件夹也可以在项目应用(App)里面创建,比如在项目应用index中创建模板文件夹temps,那么在TEMPLATES的配置属性DIRS添加os.path.join(BASE_DIR,‘index/temps’),其中index/temps代表项目应用index代表项目应用index的模板文件夹temps;并且配置属性APP_DIRS必须设置True,否则Django无法从项目应用中查找模板文件。


1、添加中间件

(1)中间件(Middleware)是一个用来处理Django请求(Ruquest)和响应(Response)的框架级别的钩子,他是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。当用户在网站中进行某个操作时,这个过程中是用户向网站发送HTTP请求(Request),而网站会根据用户的操作返回相关的网页内容,这个过程称为响应处理(Response)。从请求到响应的过程中,当Django接收到用户的请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。

image

$$
上图所示 - 中间件的执行流程
$$
1.1 从上面流程图的所示,可以清晰的看出来中间件的作用是处理用户请求信息和返回响应内容。开发者可以根据自己的开发需求自定义中间件,只要将自定义的中间件添加到配置MIDDLEWARE中即可激活。一般情况下,Django默认的中间件配置均可满足大部分的开发需求。我们在项目的MIDDLEWARE中添加LocaleMiddleware中间件可以使Django的内置功能实现中文显示。

image

1.2 中间件的数据格式为列表类型,每个中间件的设置顺序都是默认固定的,如果随意改变中间件的内容位置很容易导致程序异常。每个中间的说明明如下:

  • SecurityMiddleware:内置的安全机制,保护用户和网站的通信安全。
  • SessionMiddleware:会话Session功能。
  • LocaleMiddleware:国际化和本地化功能(中文显示)。
  • CommonMiddleware:处理请求信息,规范化请求内容。
  • CsrfViewMiddleware:开启CSRF防护功能。
  • AuthenticationMiddleware:开启内置的用户认证系统。
  • MessageMiddleware:开启内置的信息题是功能。
  • XFrameOptionsMiddleware:防止恶意程序点击劫持。

2、配置数据库

2.1 默认情况下,Django支持使用PostgreSQL、MySQL、Splite3和Oracle数据库,如果要使用其他的数据库,如MSSQL或Redis等,需要自行安装第三方插件。配置属性DATABASES是设置项目所使用的数据库信息,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据库的连接,Django提供了4种数据库引擎:

  • 'django.db.backends.postgresql'
    
  • 'django.db.backends.mysql'
    
  • 'django.db.backends.sqlite3'
    
  • 'django.db.backends.oracle'
    

2.2 在创建项目的时候,Django已默认使用sqlite3数据库,项目创建之后,如果没有修改配置属性DATABASES,当启动并运行Django时,Django会自动在项目的目录下创建db.sqlite3。由于项目需要使用MySQL数据库,因此在配置属性DATABASES中设置MySQL的连接信息。在配置数据库信息之前,首先确保本地计算机已安装MySQL数据库系统,然后再安装MySql的连接模块,Django可以使用mysqlclient和pymysq模块实现MySQL连接。

2.3 在项目当中的settings.py中修改了数据库的连接。刚刚创建的数据库里面都是空值没有任何表,然后就可以使用下面的终端命令进行数据库自行创建表的迁移。因为Django自带了内置功能,如Admin后台系统、Auth用户系统和会话机制等功能,这些功能都需要借助数据表实现:

image

Django数据库除了使用pysqlclient之外,还可以使用pymysql库进行MySQL数据库的操作。pymysql模块安装成功后,项目配置文件setting.py的参数不需要额外修改,使用之前配置的MySQL的参数即可,只需要在项目名文件夹的____init____.py中设置数据库的连接模块即可,代码如下:

# babys文件夹下的__init__.py
import pymysql
pymysql.install_as_MySQLdb()

如果需要验证pymysql模块连接MySQL数据库的功能,建议只安装一个操作数据库的Python包,在验证之前一定记得需要将数据库项目的数据表全部删除。

注:如果使用的MySQL数据库是8.0以上的版本,在Django连接MySQL数据库时会提示django.db.OperationalError的错误信息。这是因为MySQl 8.0版本的加密方式发生了改变,8.0版本的用户密码使用的是CHA加密方式。为了解决问题可以将加密方式改变,使用原生MySQL语句:

# newpassword是已经设置的用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;

3、配置静态资源

3.1 静态资源的配置分别由配置属性STATIC_URL、STATICFILES_DIRS、STATIC_ROOT完成,默认情况下,项目只配置了属性STATIC_URL。一个Web项目在开发过程中肯定要使用CSS和JavaScript文件,这些静态文件的存放路径主要在配置文件setting.py中设置,STATIC_URL默认配置如下:

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

上述配置是设置静态资源的路由地址,其作用是使浏览器能成功访问Django的静态资源。默认情况下,Django智能识别项目应用(App)里面查找相关的资源文件,查找功能主要是由App列表INSTALLED_APPS的staticfiles实现。

3.2 Django在调试模式(DEBUG=True)下只能识别项目应用(App)的static文件夹里面的静态资源,并且项目应用(App)的static文件夹不会自动生成,开发者还需要自行在项目应用中创建static文件夹,不能使用其他命名方式否则Django无法识别;若将static放在项目目录之下也是无法识别的。

3.3 由于STATIC_URL的特殊性,在开发中会造成诸多不便,比如将静态文件夹存放在项目的根目录或者定义多个静态文件夹等。若想在网页上正常访问静态资源文件,可以将自己创建的静态文件夹写入资源STATIC_DIRS,该属性以列表或者元组的形式表示,设置方法如下:

# 添加并设置配置属性STATICFILES_DIRS
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'项目静态资源文件名')
)

如果项目中有多个静态资源文件夹,并且这些文件夹不是在项目应用(App),或者项目应用(App)的文件夹不是static,那么我们需要在配置属性STATICFILES_DIRS添加对应的文件夹即可。

3.4 静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器与项目之间的映射。STATIC_ROOT主要收集整个项目的静态资源并存放在一个新的文件夹,然后有该文件夹与服务器之间构建映射关系。STATIC_ROOT的配置如下:

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

当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务,此时项目处于开发阶段,因此无须使用STATIC_ROOT。当配置属性DEBUG设置为False的时候,意味着项目进入生产环境,Django不在提供文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT。设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有的静态资源,这些静态资源会保存STATIC_ROOT中你所设置的文件夹里。


4、配置媒体资源

一般情况下,STATIC_URL是设置静态文件的路由地址,如CSS样式文件、JavaScript文件以及常用图片等。对于一些经常变动的资源,通常将其放在媒体资源文件夹,如用户头像、商品主图、商品详细介绍等等。媒体资源和静态资源是可以同时存在的,而且两者可以独立运行,互不影响。而媒体资源只有配置属性MEDIA_URL和MEDIA_ROOT。一般新建的文件夹media是用来存放媒体资源文件的,在配置settings.py分别设置MEDIA_URL和MEDIA_ROOT,使Django在运行的时候能识别媒体资源文件夹media,详细设置如下:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置属性设置后,还需要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器中访问该文件夹的文件信息。代码如下:

image

配置完成之后就能直接访问到http://127.0.0.1:8000/media/imgs/存放的图片名.jpg,python manage.py help指令可以直接查看相关指令。Django常用指令下面表格罗列一小部分常用的:

startapp 创建项目应用App
startproject 创建新的Django项目
runserver 在本地计算机上启动Django项目
migrate 根据迁移文件的内容,在数据库里生成相应的数据表

posted @ 2023-09-12 23:55  CloudWK  阅读(196)  评论(0)    收藏  举报