一、Django学习之路由
在 Django 中,路由(URL 映射)是将请求与视图函数关联起来的关键部分。路由定义了如何将特定的 URL 请求映射到 Django 应用程序中的视图函数,从而确定哪个视图函数应该处理请求。
-
URL配置文件:Django 中的路由由一个或多个 URL 配置文件定义。通常,每个应用程序都有一个名为 urls.py 的 URL 配置文件,用于定义该应用程序的路由规则。此外,Django 项目也有一个根级别的 URL 配置文件,通常命名为 urls.py。
-
导入必要的模块:在 URL 配置文件的顶部,需要导入必要的模块,包括 django.urls 和视图函数,以便进行路由配置。
from django.urls import path from . import views
-
定义 URL 路由规则:在 URL 配置文件中,你可以使用 path() 函数或 re_path() 函数来定义 URL 路由规则。这些函数将 URL 模式与相应的视图函数关联起来。以下是一个简单的示例:
urlpatterns = [ path('home/', views.home_view, name='home'), path('about/', views.about_view, name='about'), ]
在这个示例中,我们定义了两个 URL 路由规则。当用户访问 /home/ 时,将调用 views.home_view 视图函数;当用户访问 /about/ 时,将调用 views.about_view 视图函数。
-
URL 参数:你可以在路由中包含参数,以便从 URL 中捕获数据。例如,你可以定义一个接受文章 ID 的路由规则:
path('article/<int:article_id>/', views.article_detail, name='article_detail')
-
命名路由:给路由规则命名是一种良好的实践,它允许你在模板和视图中使用可读性更好的名称来引用路由。上面示例中的 name 参数用于给每个路由规则命名,例如 name=‘home’ 和 name=‘about’。
-
URL 反向解析:Django 提供了 URL 反向解析的功能,允许你根据命名的路由生成相应的 URL。这对于在模板中生成链接或在视图中重定向到其他页面非常有用。你可以使用 {% url ‘name’ %} 模板标签或 reverse(‘name’) 视图函数来进行 URL 反向解析。
-
应用命名空间:如果你的 Django 项目包含多个应用程序,可以使用应用命名空间来避免路由冲突。在应用的 URL 配置文件中使用 app_name 来定义应用的命名空间,然后在根级别的 URL 配置文件中使用该命名空间来引用应用的路由规则。
# 应用的 URL 配置文件 app_name = 'myapp' # 根级别的 URL 配置文件 path('myapp/', include('myapp.urls', namespace='myapp'))
二、Django学习之视图
在 Django 中,视图(Views)是处理 Web 请求和返回 Web 响应的核心部分。视图函数负责接收 HTTP 请求,执行必要的逻辑,然后返回 HTTP 响应。
-
创建视图函数:在 Django 中,你需要编写 Python 函数来定义视图。这些函数通常存储在应用程序的 views.py文件中。一个简单的 Django 视图函数如下:
from django.http import HttpResponse def hello(request): return HttpResponse("Hello, Django!")
这个视图函数接收一个 request 参数,该参数包含了关于当前请求的信息,然后返回一个 HttpResponse 对象,其中包含了要返回给客户端的内容。
-
HTTP 请求方法:视图函数可以根据 HTTP 请求方法来执行不同的逻辑。例如,你可以使用 request.method 来检查请求的方法,如 GET、POST、PUT、DELETE 等,然后根据不同的方法执行相应的操作。
-
URL 路由和视图映射:在 Django 中,你需要将 URL 请求映射到相应的视图函数。这通常通过在 URL 配置文件中定义路由规则来实现。每个路由规则将一个 URL 模式与一个视图函数关联起来。
from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello, name='hello'), ]
在上述示例中,path(‘hello/’, views.hello, name=‘hello’) 将 /hello/ URL 映射到 views.hello 视图函数。
-
请求参数和上下文:视图函数可以接收来自 HTTP 请求的参数,例如 URL 参数、表单数据或 JSON 数据。这些参数通常通过 request 对象来获取。视图函数还可以定义上下文数据,以便将数据传递给模板渲染。
def test(request,pid): # 1、当前url print(request.path_info) # 2、URL传递参数 print(request.GET) # 3、请求方式 print(request.method) # 4、如果post请求,传递请求体(原始数据) print(request.body) # 5、请求头 print(request.headers) # 6、cooker值 print(request.COOKIES) # 7、其他值 print(request.resolver_match) return HttpResponse("ok")
-
返回响应:视图函数的主要任务是返回一个 HTTP 响应。你可以使用 HttpResponse 对象来返回纯文本、HTML、JSON 等不同类型的响应。Django 还提供了许多其他类型的响应对象,如 JsonResponse、Redirect 等,以便根据需要返回不同类型的响应。
-
模板渲染:通常,视图函数会渲染 HTML 模板并将数据传递给模板以进行渲染。Django 使用模板引擎来将数据嵌入到 HTML 模板中,生成最终的响应。你可以使用 render 函数来渲染模板。
from django.shortcuts import render def my_view(request): data = {'name': 'John'} return render(request, 'my_template.html', context=data)
-
装饰器:Django 允许你使用装饰器来修改视图函数的行为,例如要求用户登录、缓存响应等。常用的装饰器包括 @login_required 和 @cache_page。
-
类视图:除了函数视图,Django 还支持基于类的视图(Class-Based Views,CBVs),它们提供了更多的可复用性和结构化的方式来编写视图。常见的类视图包括 DetailView、ListView、CreateView 等。
def user(request): if request.method == "GET": pass elif request.method == "POST": pass
from django.views import View class UserView(View): def get(self): pass def post(self): pass
三、Django学习之静态资源
在 Django 中,静态资源包括 CSS、JavaScript、图像和其他静态文件,它们用于构建和美化你的网站。配置和提供静态资源对于一个 Web 应用程序至关重要。
-
项目目录结构:首先,确保你的 Django 项目具有以下典型的目录结构:
myproject/ ├── myproject/ │ ├── settings.py │ ├── urls.py ├── myapp/ │ ├── static/ │ │ ├── myapp/ │ │ │ ├── css/ │ │ │ ├── js/ │ │ │ ├── images/ ├── templates/ │ ├── ... ├── manage.py
在上述结构中,myapp 是你的应用程序,static 目录用于存储静态资源,templates 目录用于存储 HTML 模板。
-
配置静态文件路径:在 Django 项目的 settings.py 文件中,确保你已经正确配置了静态文件路径。通常,你需要设置以下两个设置:
STATIC_URL = '/static/' # 静态文件的URL前缀 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'myapp/static')] # 静态文件的存储位置
STATIC_URL 定义了静态文件在 URL 中的前缀。默认情况下,它设置为 /static/,这意味着你的静态文件将通过 http://yourdomain.com/static/ 访问。
STATICFILES_DIRS 指定了静态文件的存储位置,这里设置为应用程序的 static 目录。Django 将在这些目录中查找静态文件。
-
使用静态文件:在 HTML 模板中,你可以使用 {% load static %} 模板标签来加载静态文件。然后,可以使用 {% static ‘path/to/your/static/file’ %} 标签来引用静态文件。例如:
<!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="{% static 'myapp/css/style.css' %}"> </head> <body> <img src="{% static 'myapp/images/logo.png' %}" alt="Logo"> </body> </html>
这里,{% static ‘path/to/your/static/file’ %} 将根据 STATIC_URL 配置生成正确的 URL。
-
收集静态文件:在开发过程中,Django 的开发服务器可以自动提供静态文件。但在生产环境中,通常需要收集所有静态文件到一个集中的位置,并由 Web 服务器提供。你可以使用以下命令来收集静态文件:
python manage.py collectstatic
这将会将所有静态文件从各个应用程序的 static 目录收集到一个目录中,通常是你的项目目录下的 static 目录。
-
使用 CDN(内容分发网络):在生产环境中,可以考虑使用 CDN 来提供静态资源,以加速资源加载并减轻服务器负担。在模板中使用绝对 URL 或 CDN URL 来引用静态资源。