一步一步理解 python web 框架,才不会从入门到放弃 -- 开始使用 Django

时间:2024-01-21 16:34:31

背景知识

要使用 Django,首先必须先安装 Django。

下图是 Django 官网的版本支持,我们可以看到上面有一个 LTS 存在。什么是 LTS 呢?LTS ,long-term support,也就是长期技术支持版的意思。长期技术支持版意味着资料的丰富程度和稳定性会比其他版本的要好。可以看到,目前的长期技术是 1.11,而上一个长期技术支持版是 1.8 ,我们尽量使用 1.11 长期技术支持版,因为企业在做技术选型的时候,选择的往往不是最新的,而是最稳定的。

安装 Django,打开 Django 项目

选定版本之后,安装就一句

pip3 install django==1.11.11

安装完成之后可以查看 Django 版本

django-admin --version

 新建 Django 项目

django-admin startproject 项目名称

当然,我们开发 Django 项目的时候,通常会使用 pycharm 这款 IDE。

如上图所示,你可以设置项目存储的路径,然后可以新建一个虚拟环境,也可以选择使用已有的虚拟环境。

新建项目打开之后,你会看到如下图所示的文件结构。

manage.py        # 管理Django项目的入口文件
settings.py        # 设置相关
urls.py            # 路径与函数对应关系
wsgi.py            # socket通信相关
__init__.py        # 只是为了表明这个文件夹是一个包

 

Django版,根据不同的路径,返回不同的内容

我们先像上一次那样,一步一步来,熟悉 Django 项目结构。

我们先把路径与函数的对应关系处理好,先在 urls.py 中进行配置。

HttpResponse 模块的引入

在这里,我们需要引进 Django 自带的处理 HTTP 响应的模块 HttpResponse

HttpResponse 模块可以帮我们做 HTTP 协议的响应,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情。

 

from django.conf.urls import url

# 导入 Django 自带的 HttpResponse 模块,用它来帮我们做HTTP协议的响应
# 这样,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情
from django.shortcuts import HttpResponse


def yimi(request):
    # request参数保存了所有和用户浏览器请求相关的数据
    # 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
    return HttpResponse('<h1>hello,yimi!</h1>')


def xiaohei(request):
    # request参数保存了所有和用户浏览器请求相关的数据
    # 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
    return HttpResponse('<h1>hello,xiaohei!</h1>')


# 保存了路径与函数的对应关系
urlpatterns = [
    url(r'^yimi/$', yimi),
    url(r'^xiaohei/$', xiaohei),
]
urls.py

配置好后,如何查看呢?需要运行 Django 项目。

命令行运行 Django 项目:在项目的根目录下(也就是有manage.py的那个目录),运行:

python3 manage.py runserver IP:端口  --> 在指定的IP和端口启动
python3 manage.py runserver 端口   --> 在指定的端口启动
python3 manage.py runserver        --> 默认在本机的8000端口启动

pycharm 运行:点击右上角绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)。

 运行后,输入 127.0.0.1:8000/xiaohei/ 可以看到正常的运行结果。

 可以感受到,使用 Django 框架之后,开发服务端方便了很多。我们只需要做 ①定义函数 ②定义函数和路径的对应关系 这两件事情就可以使得服务端正常响应。

settings配置

settings.py中有几个配置我们必须清楚的。

BASE_DIR 配置

所以,BASE_DIR 也就是......

 TEMPLATES 配置

有人可能会纳闷,这里 'DIRS' 为什么不使用字符串拼接的方式呢?原因,你这一个项目在开发的时候用的是 Windows 平台,项目最终都要部署到服务器,服务器却不一定是 Windows 平台的,大部分情况下都是 Linux 平台,Windows 平台和 Linux 平台的路径分隔符是不一样的,所以通过 os 模块函数进行拼接会更好。

STATICFILES_DIRS 静态文件文件夹配置

一个 HTML 通常会有许许多多的 CSS 样式和 js 动画效果,因此会有许许多多的 css 文件和 js 文件,它们通常不会和 HTML 文件放在一起,而是放在一个叫 static 的文件夹中。这个 static 文件夹就叫做静态文件夹。

在项目根目录下新建 static 目录

我们新建了 static 目录用来放静态文件,要想要 Django 帮我们找到这些静态文件,必须先在 settings.py 中告诉它这个文件夹在哪里。

 当然,如果你有多个静态文件目录,你也可以写到 STATICFILES_DIRS 里面,Django 会按照你写的目录的先后顺序,从上往下进行静态文件的查找。

 

返回完整的 HTML 页面

模板的引入

我们在 templates 目录下新建了一个 yimi.html,然后在 urls.py 中通过之前 python 文件读取的方式返回完整的 HTML 页面

可以发现,通过 python 的方式查找文件需要我们自己制定文件路径,过于麻烦

render 模块的引入

这时候,我们可以引入 render 模块,让 Django 自己去帮我们找 HTML 文件

from django.conf.urls import url

# 导入 Django 自带的 HttpResponse 模块,用它来帮我们做HTTP协议的响应
# 这样,我们只需要关心处理用户请求的函数就可以了,而不需要关注协议本身所做的事情
from django.shortcuts import HttpResponse, render  # 要返回一个完整的HTML文件,就需要用到render模块


def yimi(request):
    # request参数保存了所有和用户浏览器请求相关的数据
    # 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
    # with open('./templates/yimi.html', 'r', encoding='utf-8') as f:
    #     data = f.read()
    # return HttpResponse('<h1>hello,yimi!</h1>')

    # render的第一个参数是request,第二个参数是我们想要返回的HTML文件名字
    # 这个文件的路径就是之前在settings.py中配置好的 templates
    return render(request, 'yimi.html')


def xiaohei(request):
    # request参数保存了所有和用户浏览器请求相关的数据
    # 把想要显示在页面上的内容写到 HttpResponse 函数的括号里面即可
    return HttpResponse('<h1>hello,xiaohei!</h1>')


# 保存了路径与函数的对应关系
urlpatterns = [
    url(r'^yimi/$', yimi),
    url(r'^xiaohei/$', xiaohei),
]
urls.py

 静态文件的引入

你可能会问:“我写了一个超级好看的页面,把它的 css 独立出来,放在 Django 项目的根目录下了,应该怎么在 HTML 页面中引进来呢?”

只需下图所示一步即可

 views.py 文件的引入

到这里,你可能会发现一些问题。

例如,我们现在的全部逻辑处理函数 和 函数与路径的对应关系,都是写在 urls.py 中的,随着我们项目的发展壮大,我们需要的处理函数将会越来越多,将处理函数与函数路径的对应关系写在一个文件中,将会大大影响我们对程序的理解。

因此,我们现在要将我们自己写的 逻辑处理函数 和 函数与路径的对应关系 分离开,分成独立的文件。一个专门用来写逻辑处理函数,用于处理客户端发过来的请求;另一个则专门用来写函数与路径的对应关系。

在 项目同名 APP 目录下新建一个 views.py 文件,把原来在 urls.py 中写的逻辑处理函数全部移到 views.py 中。

urls.py 文件中需要导入我们写的那些逻辑函数。

这样下来,Django 项目中各个文件的关系也就清晰多了,而且,我不会告诉你,到现在,你已经接触到了 Django MTV 框架的精髓的哦^_^

下节预告

到这里,相信你也已经成功地安装了 Django ,并熟悉了 HttpResponse 模块、render 模块的使用,还有 settings 中 BASE_DIR、TEMPLATES、STATICFILES_DIRS 的配置,知晓了为什么要把 views 和 urls 文件进行分离。

下一节,我们将通过一个用户登录页面,来进一步学习 Django 的使用,体会 Django 的魅力所在。