Django的安装与运行
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
1. 安装
安装分为在线安装与离线安装。在此之前,我们应该已经安装好了python3,并配置好了python的环境变量。
在线安装:pip install Django -i https://pypi.tuna.tsinghua.edu.cn/simple/
离线安装: 比如下载Django-3.2.20.tar.gz,解压(windows下需要下载rar或者7zip等解压工具),然后使用python setup.py install全局安装。后面使用python -m django --version时报错了,使用pip show Django正常。这里我放弃了离线安装,因为在线安装更简单,问题少。
2. 查看Django版本
python -m django --version
或pip show Django
3. 创建Django项目
使用 django-admin startproject 项目名 创建项目。(Django-admin是命令行管理工具,用于对项目执行某些命令操作。)
可以在cmd中或者在pycharm的terminal中输入命令创建项目,我这里创建了一个HelloWorld。
4. 项目结构
创建好后,会出现两个HelloWorld以及其他一些文件。
目录说明:
- HelloWorld: 项目的容器,也是根目录。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/__init__.py: 这里表示是内层的HelloWorld/__init__.py是一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
5. 运行项目
python manage.py runserver
或者python3manage.py runserver 0.0.0.0:8000,这种方法表示0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。
说明启动正常,如果不想每次输入命令,可以如下:
添加runserver。后面就可以在manage.py上右键运行了。
6. 浏览器测试
启动浏览器,然后在地址栏输入http:127.0.0.1:8000
可以更改settings文件,将LANGUAGE_CODE = 'en-us'改为LANGUAGE_CODE = 'zh-hans',网页由英文变成中文。时区TIME_ZONE也可以配置为TIME_ZONE='Asia/Shanghai'
到这里表明正常配置并启动了Django了。
7. 编写试图
from django.http import HttpResponse def article(request,id): print(id) print(type(id)) return HttpResponse(f'文章详情{id}号') # return HttpResponse('wenzhangxiangqing') def user_func(request,name): return HttpResponse(f"用户名是{name}!!!") def hello(request): print('hello') return HttpResponse('<p><a href="/article/18.html">根相对路径</a> <a href="article/19.html">相对路径</a></p>') def path_func(request,path): print(path) return HttpResponse(f"{path}") #8-4-4-4-12 #uuid 12345678-1234-1234-1234-012345678901 def uuid_func(request,uuid): print(f"{uuid}") return HttpResponse(uuid) def slug_func(request,s): return HttpResponse(f"{s}") def search_func(request,year,month): return HttpResponse(f"{year}年{month}月") def index(request): html=""" <html> <head> <title>Django route</title> </head> <body> <ul> <li><a href="/hello">hello</a></li> <li><a href="/article/13.html">文章</a></li> <li><a href="/user/wangxi">用户信息</a></li> <li><a href="/book/12345678-1234-1234-1234-123456789012">uuid</a></li> <li><a href="/search/7/20">月日</a></li> </ul> </body> </html> """ return HttpResponse(html) def test_func(request): return HttpResponse("<h1>test</h1>")
这里写了很多函数,用于测试不同的路由。
改写urls.py文件,添加路由及路由对应的调用的视图函数。
from . import views from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls),#创建工程自带的,显示的D有jango图的首页 path('/test',views.test_func),#http://127.0.0.1:8000//test //才可以 path('hello/', views.hello), # path('article/<int:id>',article) path('article/<int:id>.html',views.article), path('user/<str:name>',views.user_func), path('detail/<path:path>',views.path_func), path('book/<uuid:uuid>',views.uuid_func), path('match/<slug:s>',views.slug_func), path('search/<int:year>/<int:month>',views.search_func), path('',views.index), ]
这里简单说一下逻辑:
现在我们直接在浏览器里输入http:127.0.0.1:8000/user/Tom
注意,这里user/Tom与代码中的user/<str:name>保持一致,user后面为字符串,否则报错。若是<int:name>,则user/数字。
代码中由path函数,函数 path() 具有四个参数,两个必须参数:route 和 view,两个可选参数:kwargs 和 name。
path() 参数: route
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
path() 参数: view
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。
path() 参数: kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数。
path() 参数: name
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
小结:本文对Django进行了安装并运行了一个简单的Django项目,但本文并未对settings.py文件,urls.py文件做更多的讲解,没有对path函数做过多的讲述。如需详细了解请自行查阅资料。另外,在path中的url如果重名,则浏览器访问时,按照由前往后顺序查找,匹配后,后面的重名的不再匹配。
不足或错误之处欢迎之处与评论!