【Django 笔记】Django快速入门 第1节: 请求和响应
笔记基于官方文档和技术博客,从中提取关键信息,和记录笔记,详见官方文档。
Django快速入门官方文档:Part 1: Requests and responses
目录
为了各个项目便于管理,推荐 Django应用 在虚拟环境中创建。
1. 查看Django版本:
python -m django --version
2. 创建项目
django-admin startproject 项目名称
命令行cd
到想放置代码的目录,然后运行以下命令:
django-admin startproject mysite
将会在当前目录下创建一个 mysite
目录,用 tree 可见其结构。
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
各文件和目录解释:
- 外层的
mysite/
目录与Django无关,只是你项目的容器,可以任意重命名。 manage.py
:一个命令行工具,是项目的管理文件,用于与Django进行不同方式的交互脚本,非常重要!- 内层的
mysite/
目录是真正的项目文件包裹目录,它的名字是你引用内部文件的包名,例如:mysite.urls
。__init__.py
:一个定义包的空文件。settings.py
:项目的主配置文件,非常重要!urls.py
:路由文件,进行路由配置。所有的任务都是从这里开始分配,相当于Django驱动站点的内容表格,非常重要!wsgi.py
:一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。
还可以使用Pycharm创建Django工程,2018以后的Pycharm版本都支持同时创建虚拟环境和Django工程。
3. 启动开发服务器
启动 Django 自带的用于开发的简易服务器:cd到项目的根目录执行命令
python manage.py runserver
在浏览器访问http://127.0.0.1:8000/
,看到Django的火箭欢迎界面,则一切OK!
可以指定端口:
python manage.py runserver 8080
指定ip和端口:
python manage.py runserver 0:8000
0 是 0.0.0.0 的简写。
4. 创建应用
在 Django 中,每一个应用(app)都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可生成应用的基础目录结构。
app应用与project项目的区别:
- 一个app实现某个功能,比如博客、公共档案数据库或者简单的投票系统;
- 一个project是配置文件和多个app的集合,这些app组合成整个站点;
- 一个project可以包含多个app;
- 一个app可以属于多个project!
app的存放位置可以是任何地点,但是通常都将它们放在与manage.py
脚本同级的目录下。
进入mysite项目根目录,确保与manage.py
文件处于同一级,输入下述命令:(格式:python manage.py startapp 应用名)
python manage.py startapp polls
这将会创建一个 polls
目录,使用tree可查看目录结构。
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
注:Pycharm没有创建app的图形化按钮,需在下方的Terminal
终端中输入以上命令。创建项目时使用了虚拟环境的画,Terminal
会自动进入虚拟环境。
注册应用
应用创建成功后,需要安装注册才可以使用,也就是建立应用和项目之间的关联,在mysite/settings.py(项目跟目录的setting.py)中INSTALLED_APPS下添加应用的名称就可以完成安装。
在元组中添加一个新的项,当前示例为polls:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
]
5.编写视图
(1) 在 应用名/views.py 中编写视图。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
(2) 要调用视图,还需要将一个 URL 映射到它。即需要编写urlconf,也就是路由路径。在polls 目录(应用的目录) 里新建一个 urls.py
文件。(注意:还有一个主urls.py文件,在与项目同名的文件夹)
polls/urls.py
:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
(3) 下一步是要在根 URLconf 文件中指定我们创建的 polls.urls(应用名.urls)
模块。在 mysite/urls.py
(项目根目录/urls.py
)文件导入include模块,在 urlpatterns
列表里添加条目,指向我们刚才建立的polls这个app独有的urls文件。
mysite/urls.py
:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')), # 添加条目
path('admin/', admin.site.urls),
]
路由设置成功后,启动服务器,然后在浏览器中访问地址 http://localhost:8000/polls/
一切正常的话,你将看到“Hello, world. You’re at the polls index.”
没有找到页面? 检查是不是访问地址是不是写成了 http://localhost:8000/
建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。
6. 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
view指的是处理当前url请求的视图函数。当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个
HttpRequest
对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。
path()
参数:kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数。kwargs参数允许您向视图函数或方法传递额外的参数. See 传递额外选项给视图函数 for an example.
path()
参数:name
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
path()方法的四个参数,每个都非常有讲究,这里只做了解。
关于URL调度器参考:https://docs.djangoproject.com/zh-hans/2.2/topics/http/urls/
完整官方文档:Django documentation
博客推荐:Django2.2教程