Django概述

Posted 礁之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django概述相关的知识,希望对你有一定的参考价值。

文章目录


此文章参考菜鸟Django教程:Django 简介 | 菜鸟教程 (runoob.com)

一、Django概述

  • Django是一个由Python编写的开源的Web应用框架(用于进行Web开发的一套软件架构)

  • 使用Django框架,只需要很少的代码就可以轻松完成一个正式网站所需要的大部分内容,并且进一步开发出全功能的Web功能。Django本身基于MVC模型(Model模型+View视图+Controller控制器的设计模式),MVC模式使后续对程序的修改和扩展简化,并且使程序的某一部分重复利用成为可能

  • Django是MTV模式,本质和MVC模式是一样的

  • Python+Django使快速开发、设计、部署网站的最佳组合,特点:

    1. 强大的数据库功能
    2. 自带强大的后台功能
    3. 优雅的网址

- MVC模型

  • MVC模式是一种软件架构模式,它把软件系统分为三个部分:
  1. 模型(Model):业务逻辑处理,主要用来负责业务逻辑的处理、数据的保持,编写程序应有的功能,负责业务对象与数据库的映射(ORM对象映射关系),Model使MVC模型的核心部分,并且它也是需要实现的最主要的部分 (编写的功能、数据库的连接与管理)
  2. 视图(View):画面表示,图形界面,负责与用户的交互 (展示的页面)
  3. 控制器(Controller):控制,负责转发请求,接收从View视图发过来的数据,并且对请求进程处理,主要负责控制Model模型和View视图 (负责转发用户请求对请求进行处理)
  • MVC模式的目的是实现一种动态的程序设计,用于简化后续对程序的修改和扩展,并且使程序某一部分的重复利用成为可能

  • MVC以一种插件式的、松耦合的方式连接在一起,下面是菜鸟的用户操作流程图:

  • 下面是从Django MTV和MVC的区别 (biancheng.net)网站中MVC的流程图

- MTC模型

  • Django的MTV模式本质上和MVC是一样的,这也是为了各组件间保持松耦合关系,只是定义上有些不同,Django的MTV分别是:

    模型(Model):编写程序应有的功能,负责数据管理 (与MVC的模型作用相似)

    模板(Template):负责网页展示 (相当于MVC的视图)

    视图(View):负责业务逻辑控制,并且会在适当时候调用模型和模板 (相当于MVC的控制器)

  • 除了上面三层之外,还需要一个URL分发器,分发器的作用是将一个个URL的页面请求分发给不同的视图处理,视图再去调用相应的模型和模板,下面是菜鸟的用户操作流程图:

二、安装Django(windows)

注意:这里使用VSCode安装Django

  • 安装VSCode,安装后进入扩展,安装Python

  • 创建项目文件夹

  • 使用VSCode打开项目文件夹django,然后打开终端,输入python -m venv test,创建虚拟环境test

  • 在VSCode中按键Ctrl+Shift+p,输入>python:Select Interpreter,选择Python解释器为虚拟环境的路径

(就是创建的虚拟环境目录下的python程序)

  • 进入虚拟环境,安装Django(在终端中操作)
#进入虚拟环境
PS F:\\django> cd .\\test\\Scripts\\
PS F:\\django\\test\\Scripts> . .\\activate  #进入虚拟环境
(test) PS F:\\django\\test\\Scripts>    #前面多出(test)表示成功进入虚拟环境

#安装django
(test) PS F:\\django\\test\\Scripts> pip -V
pip 22.0.4 from F:\\django\\test\\lib\\site-packages\\pip (python 3.10)
(test) PS F:\\django\\test\\Scripts> pip install django

#下载慢的话使用这个
——————————————————————————————————————————————————————
pip install -i https://pypi.douban.com/simple django
——————————————————————————————————————————————————————

(test) PS F:\\django\\test\\Scripts> python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import django  #成功导入,可以看到版本,就说明安装成功
>>> django.VERSION
(4, 1, 0, 'final', 0)
  • 至此,windows上的django安装完成

三、第一个Django项目

  • 安装Django后,我们可以使用管理工具django-admin
(test) PS F:\\django\\test\\Scripts> django-admin  #直接执行,会有此命令的介绍

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.).
  • 下面来创建helloworld项目
#回到项目目录
(test) PS F:\\django\\test\\Scripts> cd ../../
(test) PS F:\\django> django-admin startproject helloworld  #创建django项目helloworld
(test) PS F:\\django> ls  

    目录: F:\\django

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          2022/7/1     16:59                helloworld   #可以看到成功创建
d-----          2022/7/1     16:53                test

(test) PS F:\\django> cd .\\helloworld\\
(test) PS F:\\django\\helloworld> ls

    目录: F:\\django\\helloworld

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          2022/7/1     16:59                helloworld
-a----          2022/7/1     16:59            688 manage.py

(test) PS F:\\django\\helloworld> python .\\manage.py runserver 0.0.0.0:8000  #启动,端口8000,0.0.0.0可以使所有IP都可以访问,如果只配置端口,那么只有本地能访问
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

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.
July 01, 2022 - 17:25:35
Django version 4.0.5, using settings 'helloworld.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.

#Ctrl+c退出
  • 访问本地127.0.0.1:8000,访问成功!!!

  • 创建之后,其实可以看到此项目的目录结构:
(test) PS F:\\django\\helloworld> ls 

    目录: F:\\django\\helloworld

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          2022/7/1     17:01                helloworld  #这个就是项目容器
-a----          2022/7/1     17:01              0 db.sqlite3  #这个是python自带的数据库
-a----          2022/7/1     16:59            688 manage.py   #一个实用的命令行工具,让我们可以以各种方式与Django项目进行交互

(test) PS F:\\django\\helloworld> ls .\\helloworld\\

    目录: F:\\django\\helloworld\\helloworld

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          2022/7/1     17:01                __pycache__
-a----          2022/7/1     16:59            413 asgi.py  #一个ASGI兼容的Web服务器入口,方便运行我们的项目
-a----          2022/7/1     16:59           3356 settings.py  #此Django项目的设置文件
-a----          2022/7/1     16:59            773 urls.py   #此Django项目的URL声明,一份由Django驱动的网站“目录”,里面可以指定“网页”
-a----          2022/7/1     16:59            413 wsgi.py #一个WSGI兼容的Web服务器入口,方便运行我们的项目
-a----          2022/7/1     16:59              0 __init__.py   #一个空文件,告诉Python此目录是一个Python包
  • 在创建Django项目后,项目目录的结构:
  1. helloworld:项目容器
  2. manage.py:Django的命令行工具
  • 项目容器中的文件:
  1. asgi.py:一个ASGI兼容的Web服务器入口,方便运行我们的项目
  2. settings.py:此Django项目的设置文件
  3. urls.py:此Django项目的URL声明,一份由Django驱动的网站“目录”,里面可以指定“网页”
  4. wsgi.py:一个WSGI兼容的Web服务器入口,方便运行我们的项目
  5. __init__.py:一个空文件,告诉Python此目录是一个Python包
  • 网页可以调整为中文,修改项目容器中的settings.py文件,修改LANGUAGE_CODEzh-Hans

注意:代码修改完后无需重启,服务器会自动检测代码的改动并且自动载入

  • 再次访问:

  • 我们在启动的时候,虽然是配置了0.0.0.0:8000,但是还需要改一下配置,才可以使其他ip都能访问,同样还是settings.py文件,修改ALLOWED_HOSTS = []ALLOWED_HOSTS = ["*"]


  • 在修改文件、保存之后,可以从终端看到重载的日志:

- 更换页面(添加访问资源)

  • 在helloworld目录下的helloworld容器中,新建一个index_test.py文件,这是我们新建的页面
#-*- coding: utf-8 -*-
from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello World!!!")
  • 文件创建后,绑定URL和视图函数,打开urls.py文件,删除原来代码,重新编写

其中path()函数的使用:

path(route, view, kwargs=None, name=None)
  • route:必选参数,传入字符串,表示URL匹配规则,会执行对应的第二个参数view
  • view:必选参数,用于执行与正则表达式匹配的URL请求,下面就是调用了index_test模块中的hello函数,也就是调用页面的
  • kwargs:可选参数,视图使用的字典类型的参数
  • name:用来反向获取URL
#-*- coding: utf-8 -*-
from django.urls import path

from . import index_test

urlpatterns = [
    path('hello/',index_test.hello),            #指定hello资源,这里指定的就是index_test.hello()方法
]
  • 修改后,可以看到,日志刷新,访问127.0.0.1:8000/hello,发现页面已经更改

  • 注意:

菜鸟教程中导入的是django.conf.urls,此方法在Django2.0以上版本已经被django.urls取代,所以需要使用path

以上是关于Django概述的主要内容,如果未能解决你的问题,请参考以下文章

四十七 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

Django + Nginx + Daphne实现webssh功能

django-redis 使用规范

GoogleAppEngine 上的 Django:性能指南

Django视图层——中间件概述