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 来引用静态资源。

相关推荐
a_安徒生21 分钟前
linux安装TDengine
linux·数据库·tdengine
程序员学习随笔24 分钟前
PostgreSQL技术内幕19:逻辑备份工具pg_dump、pg_dumpall
数据库·postgresql
尘浮生1 小时前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。5351 小时前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel1 小时前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH30732 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介2 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人2 小时前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库