Django开发之基础篇

Django基础篇


一、Django学习之路由

在 Django 中,路由(URL 映射)是将请求与视图函数关联起来的关键部分。路由定义了如何将特定的 URL 请求映射到 Django 应用程序中的视图函数,从而确定哪个视图函数应该处理请求。

  1. URL配置文件:Django 中的路由由一个或多个 URL 配置文件定义。通常,每个应用程序都有一个名为 urls.py 的 URL 配置文件,用于定义该应用程序的路由规则。此外,Django 项目也有一个根级别的 URL 配置文件,通常命名为 urls.py

  2. 导入必要的模块:在 URL 配置文件的顶部,需要导入必要的模块,包括 django.urls 和视图函数,以便进行路由配置。

    python 复制代码
    from django.urls import path
    from . import views
  3. 定义 URL 路由规则:在 URL 配置文件中,你可以使用 path() 函数或 re_path() 函数来定义 URL 路由规则。这些函数将 URL 模式与相应的视图函数关联起来。以下是一个简单的示例:

    python 复制代码
    urlpatterns = [
        path('home/', views.home_view, name='home'),
        path('about/', views.about_view, name='about'),
    ]

    在这个示例中,我们定义了两个 URL 路由规则。当用户访问 /home/ 时,将调用 views.home_view 视图函数;当用户访问 /about/ 时,将调用 views.about_view 视图函数。

  4. URL 参数:你可以在路由中包含参数,以便从 URL 中捕获数据。例如,你可以定义一个接受文章 ID 的路由规则:

    python 复制代码
    path('article/<int:article_id>/', views.article_detail, name='article_detail')
  5. 命名路由:给路由规则命名是一种良好的实践,它允许你在模板和视图中使用可读性更好的名称来引用路由。上面示例中的 name 参数用于给每个路由规则命名,例如 name='home' 和 name='about'。

  6. URL 反向解析:Django 提供了 URL 反向解析的功能,允许你根据命名的路由生成相应的 URL。这对于在模板中生成链接或在视图中重定向到其他页面非常有用。你可以使用 {% url 'name' %} 模板标签或 reverse('name') 视图函数来进行 URL 反向解析。

  7. 应用命名空间:如果你的 Django 项目包含多个应用程序,可以使用应用命名空间来避免路由冲突。在应用的 URL 配置文件中使用 app_name 来定义应用的命名空间,然后在根级别的 URL 配置文件中使用该命名空间来引用应用的路由规则。

    python 复制代码
    # 应用的 URL 配置文件
    app_name = 'myapp'
    
    # 根级别的 URL 配置文件
    path('myapp/', include('myapp.urls', namespace='myapp'))

二、Django学习之视图

在 Django 中,视图(Views)是处理 Web 请求和返回 Web 响应的核心部分。视图函数负责接收 HTTP 请求,执行必要的逻辑,然后返回 HTTP 响应。

  1. 创建视图函数:在 Django 中,你需要编写 Python 函数来定义视图。这些函数通常存储在应用程序的 views.py文件中。一个简单的 Django 视图函数如下:

    python 复制代码
    from django.http import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello, Django!")

    这个视图函数接收一个 request 参数,该参数包含了关于当前请求的信息,然后返回一个 HttpResponse 对象,其中包含了要返回给客户端的内容。

  2. HTTP 请求方法:视图函数可以根据 HTTP 请求方法来执行不同的逻辑。例如,你可以使用 request.method 来检查请求的方法,如 GET、POST、PUT、DELETE 等,然后根据不同的方法执行相应的操作。

  3. URL 路由和视图映射:在 Django 中,你需要将 URL 请求映射到相应的视图函数。这通常通过在 URL 配置文件中定义路由规则来实现。每个路由规则将一个 URL 模式与一个视图函数关联起来。

    python 复制代码
    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 视图函数。

  4. 请求参数和上下文:视图函数可以接收来自 HTTP 请求的参数,例如 URL 参数、表单数据或 JSON 数据。这些参数通常通过 request 对象来获取。视图函数还可以定义上下文数据,以便将数据传递给模板渲染。

    python 复制代码
    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")
  5. 返回响应:视图函数的主要任务是返回一个 HTTP 响应。你可以使用 HttpResponse 对象来返回纯文本、HTML、JSON 等不同类型的响应。Django 还提供了许多其他类型的响应对象,如 JsonResponse、Redirect 等,以便根据需要返回不同类型的响应。

  6. 模板渲染:通常,视图函数会渲染 HTML 模板并将数据传递给模板以进行渲染。Django 使用模板引擎来将数据嵌入到 HTML 模板中,生成最终的响应。你可以使用 render 函数来渲染模板。

    python 复制代码
    from django.shortcuts import render
    
    def my_view(request):
        data = {'name': 'John'}
        return render(request, 'my_template.html', context=data)
  7. 装饰器:Django 允许你使用装饰器来修改视图函数的行为,例如要求用户登录、缓存响应等。常用的装饰器包括 @login_required 和 @cache_page。

  8. 类视图:除了函数视图,Django 还支持基于类的视图(Class-Based Views,CBVs),它们提供了更多的可复用性和结构化的方式来编写视图。常见的类视图包括 DetailView、ListView、CreateView 等。

    python 复制代码
    def user(request):
        if request.method == "GET":
            pass
        elif request.method == "POST":
            pass
    python 复制代码
    from django.views import View
    class UserView(View):
        def get(self):
            pass
        def post(self):
            pass

三、Django学习之静态资源

在 Django 中,静态资源包括 CSS、JavaScript、图像和其他静态文件,它们用于构建和美化你的网站。配置和提供静态资源对于一个 Web 应用程序至关重要。

  1. 项目目录结构:首先,确保你的 Django 项目具有以下典型的目录结构:

    python 复制代码
    myproject/
    ├── myproject/
    │   ├── settings.py
    │   ├── urls.py
    ├── myapp/
    │   ├── static/
    │   │   ├── myapp/
    │   │   │   ├── css/
    │   │   │   ├── js/
    │   │   │   ├── images/
    ├── templates/
    │   ├── ...
    ├── manage.py

    在上述结构中,myapp 是你的应用程序,static 目录用于存储静态资源,templates 目录用于存储 HTML 模板。

  2. 配置静态文件路径:在 Django 项目的 settings.py 文件中,确保你已经正确配置了静态文件路径。通常,你需要设置以下两个设置:

    python 复制代码
    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 将在这些目录中查找静态文件。

  3. 使用静态文件:在 HTML 模板中,你可以使用 {% load static %} 模板标签来加载静态文件。然后,可以使用 {% static 'path/to/your/static/file' %} 标签来引用静态文件。例如:

    html 复制代码
    <!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。

  4. 收集静态文件:在开发过程中,Django 的开发服务器可以自动提供静态文件。但在生产环境中,通常需要收集所有静态文件到一个集中的位置,并由 Web 服务器提供。你可以使用以下命令来收集静态文件:

    python 复制代码
    python manage.py collectstatic

    这将会将所有静态文件从各个应用程序的 static 目录收集到一个目录中,通常是你的项目目录下的 static 目录。

  5. 使用 CDN(内容分发网络):在生产环境中,可以考虑使用 CDN 来提供静态资源,以加速资源加载并减轻服务器负担。在模板中使用绝对 URL 或 CDN URL 来引用静态资源。

相关推荐
oradh15 分钟前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789861 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD1 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward2 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记2 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发3 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB3 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
Database_Cool_3 小时前
AI Agent 长期记忆怎么存?阿里云 PolarDB-X 对接 Mem0 记忆框架实践
数据库·阿里云
会编程的土豆4 小时前
数据库范式
数据库·oracle
L1624764 小时前
MySQL 全环境生产快速安装 + 完整配置手册(整合国产银河麒麟适配 + 主从补充版)
数据库·mysql