欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

一.初识django

时间:2023-05-28
Django4.0开发环境配置

author: once Day date:2022年2月11日

本文档在于总结相关内容,零散的知识难以记忆学习。

本文档基于windows平台。

1.简介

Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现给前台用户的应用。比如将电子购物网站的商品数据在浏览器上展示给客户,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展现出来等等。

而Django是基于Python的Web开发框架。早期没有框架的时候,人们使用python直接编写HTML网页,曾经这一方法很流行。

Django是一个全栈Web框架。所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP请求和响应、数据库读写管理、HTML模板渲染等一系列功能的框架。你可以不太准确地理解为全栈工程师包办了前后端和数据库访问的所有开发工作,整个网站都是一个人搭建的。

Django本身基于MVC架构,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等优点。

Django的设计模式命名为MTV:

模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。白话说,这个模块就是业务逻辑和数据库的交互层,定义了数据表。模板(Template):将模型数据与HTML页面结合起来的引擎视图(View):负责实际的业务逻辑实现

逻辑图参考如下:

详情参考文档:

django Django简介 - 刘江的django教程 (liujiangblog.com)Django 简介_w3cschool 2.Django开发环境搭建

安装Django之前需要安装Python。目前大版本为Django3.0+,需要python3.6及以上版本支持。

python安装可参考:Windows平台python安装

具体安装可参考:

Django 安装_w3cschooldjango Django环境安装 - 刘江的django教程 (liujiangblog.com)

Django本质上是Python语言的一个类库,因此可以通过pip工具安装。这也是最简便、最好的安装方式。

pip install django

在Windows环境下,需要注意系统环境变量的设置。

使用 pip list 命令可以检查所有安装模块,这样可以确定是否已安装Django模块。

安装好了以后,可以在命令行使用

django-admin help

获取Django支持的命令语句。诸如以下所示(Django4.0.1)

[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

3.Project(项目)和apps(应用) 3.1Project项目创建

项目是Django的核心部分,你可以认为你的个人网站即是一个Project,而一个网页会有多个应用或模组,如图片墙,评论区,博客文章等。

实际上Project和app完全可以是多对多的样子。

建立Django project只需要下列命令即可:

django-admin startproject mysite

其中mysite是项目名字,任意取名,除了不能与python模组重名。目录结构如下所示

PS E:Djangomysite> dir -d 2 目录: E:DjangomysiteMode LastWriteTime Length Name---- ------------- ------ ----d----- 2022/2/12 11:09 mysite-a---- 2022/2/12 11:09 684 manage.py 目录: E:DjangomysitemysiteMode LastWriteTime Length Name---- ------------- ------ -----a---- 2022/2/12 11:09 405 asgi.py-a---- 2022/2/12 11:09 3344 settings.py-a---- 2022/2/12 11:09 769 urls.py-a---- 2022/2/12 11:09 405 wsgi.py-a---- 2022/2/12 11:09 0 __init__.py

各文件和目录解释:

外层的mysite/目录与Django无关,只是你项目的容器,可以任意重命名。manage.py:一个命令行工具,管理Django的交互脚本。内层的mysite/目录是真正的项目文件包裹目录,它的名字是你引用内部文件的Python包名,例如:mysite.urls。mysite/__init__.py:一个定义包的空文件。mysite/settings.py: 项目的配置文件。mysite/urls.py: 路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的目录。mysite/wsgi.py:一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。mysite/asgi.py:一个基于ASGI的web服务器进入点,提供异步的网络通信功能,通常不用关心。

这些文件里面,settings.py和urls.py是用户自定义最多的文件。其他文件都是无需操心的。

输入以下命令可以查看manage.py支持的交互命令 :

PS E:Djangomysite> python manage.py -hType 'manage.py help ' for help on a specific subcommand.Available subcommands:[auth] changepassword createsuperuser[contenttypes] remove_stale_contenttypes[django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver[sessions] clearsessions[staticfiles] collectstatic findstatic runserver

其中[auth]等表示相应模块支持的命令,比如auth是用户认证工具。

help还可以查看对应命令的详细用法和作用。

PS E:Djangomysite> python manage.py help runserverusage: manage.py runserver [-h] [--ipv6] [--nothreading] [--noreload] [--nostatic] [--insecure] [--version] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--no-color] [--force-color] [--skip-checks] [addrport]Starts a lightweight web server for development and also serves static files.positional arguments: addrport Optional port number, or ipaddr:portoptional arguments: -h, --help show this help message and exit --ipv6, -6 Tells Django to use an IPv6 address. --nothreading Tells Django to NOT use threading. --noreload Tells Django to NOT use the auto-reloader. --nostatic Tells Django to NOT automatically serve static files at STATIC_URL. --insecure Allows serving static files even if DEBUG is False. --version Show program's version number and exit. --settings SETTINGS The Python path to a settings module, e.g、"myproject.settings.main"、If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath PYTHonPATH A directory to add to the Python path, e.g、"/home/djangoprojects/myproject". --no-color Don't colorize the command output. --force-color Force colorization of the command output. --skip-checks Skip system checks.

现在project里面还没有任何apps,而runserver可以开启一个用于开发的web服务器,因此无需配置一个类似Ngnix的生产服务器,就能让站点运行起来。这是一个由Python编写的轻量级服务器,简易并且不安全,因此不能用于生产环境。

现在就直接运行runserver命令并访问一下这个测试服务器:

PS E:Djangomysite> python manage.py runserverWatching for file changes with StatReloaderPerforming 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.February 12, 2022 - 11:45:33Django version 4.0.1, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.

默认的访问地址是http://127.0.0.1:8000/,复制粘贴到浏览器,就可以看到它的界面了。

3.2Apps应用创建

在 Django 中,每一个应用(app)都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构。

app应用与project项目的区别:

一个app实现某个具体功能,比如博客、公共档案数据库或者简单的投票系统;一个project是配置文件和多个app的集合,这些app组合成整个站点;一个project可以包含多个app;一个app可以属于多个project!

app的存放位置可以是任何地点,但是通常都将它们放在与manage.py脚本同级的目录下,这样方便导入文件。

输入以下命令即可创建应用,

python manage.py startapp login

这里创建了一个登入应用,其目录结构如下:

PS E:djangomysite> dir ./login -d 2 目录: E:djangomysiteloginMode LastWriteTime Length Name---- ------------- ------ ----d----- 2022/2/12 21:03 migrations-a---- 2022/2/12 21:03 66 admin.py-a---- 2022/2/12 21:03 148 apps.py-a---- 2022/2/12 21:03 60 models.py-a---- 2022/2/12 21:03 63 tests.py-a---- 2022/2/12 21:03 66 views.py-a---- 2022/2/12 21:03 0 __init__.py 目录: E:djangomysiteloginmigrationsMode LastWriteTime Length Name---- ------------- ------ -----a---- 2022/2/12 21:03 0 __init__.py

各个目录的说明:

admin.py 管理后台apps.py 应用migrations 迁移model.py 模型test.py 测试view.py 视图

根据Gjango的MTV框架,其处理 request 的流程如下:

浏览器送出 HTTP RequestDjango 依据 URL Conf 分配至对应的 ViewView 进行资料库的操作或其他运算,并回传 Http Response 物件浏览器依据 HTTP Response,显示网页画面

这里先在视图view.py里定义一个函数,

#login/view.pyfrom django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.#定义一个函数,或者说一个网页def user_login(request):#浏览器送出 HTTP Request return HttpResponse("欢迎来到once Day的个人网站!")

现在有了一个View,但还需要配置URL使得Django能正确分配访问请求。

官方列出了三种View和URL之间的配置,

Function views 1、Add an import: from my_app import views 2、Add a URL to urlpatterns: path('', views.home, name='home')Class-based views 1、Add an import: from other_app.views import Home 2、Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf 1、import the include() function: from django.urls import include, path 2、Add a URL to urlpatterns: path('blog/', include('blog.urls'))

从模块化编程思想出发,把Apps中的View配置到Project的URL中,通过第三种方式比较好。而在app内部则设置一个urls.py文件,采用第一种或第二种方式导入。这样不同app内部的URL配置相对独立,整体上也便于管理。在login文件夹内新建urls.py文件,并填入下列代码:

#login/urls.pyfrom django.urls import path#导入编写的视图函数,注意默认的根目录是项目文件夹所在的目录from login.views import user_loginurlpatterns = [ path('', user_login,name="login"),#格式按官方的例子写就行]

然后在mysite项目的urls.py中导入login的urls.py配置:

from django.contrib import adminfrom django.urls import path,includeurlpatterns = [ path('admin/', admin.site.urls), path("login/",include("login.urls")),]

注意导入的格式也是按官方的例子套的!include语法相当于多级路由,它把接收到的url地址去除与此项匹配的部分,将剩下的字符串传递给下一级路由urlconf进行判断。

include的背后是一种即插即用的思想。项目的根路由不关心具体app的路由策略,只管往指定的二级路由转发,实现了应用解耦。app所属的二级路由可以根据自己的需要随意编写,不会和其它的app路由发生冲突。app目录可以放置在任何位置,而不用修改路由。这是软件设计里很常见的一种模式。

建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。

path函数的原型如下:

# path()@overloaddef path( route: str, view: Callable[..., HttpResponsebase], kwargs: Dict[str, Any] = ..., name: str = ...) -> URLPattern: ...@overloaddef path(route: str, view: IncludedURLConf, kwargs: Dict[str, Any] = ..., name: str = ...) -> URLResolver: ...@overloaddef path( route: str, view: Sequence[Union[URLResolver, str]], kwargs: Dict[str, Any] = ..., name: str = ...) -> URLResolver: ...

该函数可以接受四个参数,其中前2个是必须的:route和view,以及2个可选的参数:kwargs和name。

route route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项path开始,按顺序依次匹配列表中的项,直到找到匹配的项,然后执行该条目映射的视图函数或下级路由,其后的条目将不再继续匹配。因此,url路由执行的是短路机制,path的编写顺序非常重要!需要注意的是,route不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.liujiangblog.com/myapp/时,它会尝试匹配 myapp/。处理请求 https://www.liujiangblog.com/myapp/?page=3 时,也只会尝试匹配 myapp/。view view指的是处理当前url请求的视图函数。当Django匹配到某个路由条目时,自动将封装的HttpRequest对象作为第一个参数,被“捕获”的参数以关键字参数的形式,传递给该条目指定的视图view。kwargs 任意数量的关键字参数可以作为一个字典传递给目标视图。name 对URL进行命名,能够在Django的任意处,尤其是模板内显式地引用它。这是一个非常强大的功能,相当于给URL取了个全局变量名,不会将url匹配地址写死。

做完以上工作,运行,

PS E:djangomysite> python manage.py runserver

浏览器访问127.0.0.1:8000/login/,即可看到编写的网页!

具体参考文档;

Project and apps_w3cschoolViews and URLconfs_w3cschoolDjango 创建第一个项目_w3cschooldjango Part 1:请求与响应 - 刘江的django教程 (liujiangblog.com) 注:本文章内容收集总结于互联网,仅供学习之用!

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。