快速了解Django:核心概念解析与实践指南


title: 快速了解Django:核心概念解析与实践指南

date: 2024/5/1 20:31:41

updated: 2024/5/1 20:31:41

categories:

  • 后端开发

tags:

  • Django核心
  • 路由系统
  • 视图系统
  • ORM管理
  • 中间件
  • Web框架
  • 登录装饰器

第一章:Django简介

背景和发展历程:

Django是一个开放源代码的Web应用框架,由Lawrence Journal-World开发并于2005年发布。最初是为了满足新闻网站的需求而开发的,后来成为一个功能强大且灵活的Web开发框架。Django得到了全球开发者的广泛认可和使用,目前被许多知名网站和公司所采用。

选择Django的原因:

  • 高效易用:Django遵循"快速开发"的原则,提供了许多现成的工具和功能,使开发者能够快速构建功能完善的Web应用。
  • 完善的文档和社区支持:Django拥有丰富的官方文档和活跃的社区,开发者可以轻松获取帮助和资源。
  • 丰富的功能模块:Django内置了许多常用的功能模块,如用户认证、管理后台、表单处理等,减少了开发工作量。
  • 安全性强:Django具有内置的安全机制,能够有效防范常见的Web安全漏洞,如SQL注入、跨站脚本等。
  • 可扩展性好:Django支持各种第三方插件和扩展,可以根据项目需求灵活扩展功能。

核心特点和优势:

  • MTV架构:Django采用了MTV(Model-Template-View)的设计模式,将应用程序分为模型、模板和视图三层,使代码结构清晰,易于维护。
  • 强大的ORM:Django的ORM(对象关系映射)提供了方便的数据库操作方式,使开发者能够通过Python代码操作数据库,而无需编写SQL语句。
  • 自动化Admin后台:Django自带了一个强大的Admin后台管理工具,可以方便地管理网站内容和数据。
  • 灵活的URL配置:Django的URL配置非常灵活,可以通过简单的配置实现URL与视图函数的映射关系,支持正则表达式等高级匹配方式。
  • 模板系统:Django的模板系统简单易用,支持模板继承、过滤器、标签等功能,使前端开发更加高效。
  • 安全性:Django内置了一些安全特性,如跨站请求伪造(CSRF)保护、XSS(跨站脚本攻击)防护等,帮助开发者构建安全的Web应用。

第二章:环境搭建与项目创建

环境搭建:

  1. 安装Python:Django是基于Python的,首先确保你的计算机上安装了Python(推荐使用最新稳定版)。

  2. 安装Django:打开命令行(Windows用户可以使用cmd或PowerShell,Mac/Linux用户使用终端),输入以下命令安装Django:

    shell 复制代码
    pip install django
  3. 安装数据库驱动:根据你的项目需求选择数据库,如PostgreSQL、MySQL或SQLite。安装相应的数据库驱动,如:

    shell 复制代码
    pip install psycopg2-binary (for PostgreSQL)
    pip install mysqlclient (for MySQL)
    pip install django.db.backends.sqlite3 (for SQLite)
  4. 设置环境变量 :确保Python可执行路径在系统环境变量中,或者在命令行中使用python而不是python3

创建第一个Django项目:

  1. 使用命令行,进入你希望存放项目的文件夹:

    shell 复制代码
    cd /path/to/your/project/folder
  2. 运行Django命令创建项目:

    shell 复制代码
    django-admin startproject my_first_django_project

    这将创建一个名为my_first_django_project的文件夹,其中包含了基本的Django项目结构。

Django项目的基本结构和文件目录: 一个典型的Django项目结构包括以下主要文件和目录:

  • my_first_django_project:项目根目录,包含项目的配置文件和管理工具。
  • my_first_django_project/settings.py:项目设置文件,包含各种配置信息。
  • my_first_django_project/urls.py:项目URL配置文件,定义了应用的URL结构。
  • my_first_django_project/wsgi.py:Web服务器接口,用于将请求传递给Django。
  • my_first_django_project/migrations:数据库迁移目录,用于管理数据库结构的变更。
  • my_first_django_project/static:静态文件目录,存放CSS、JavaScript等资源。
  • my_first_django_project/templates:模板目录,用于存放HTML和模板文件。
  • my_first_django_project manage.py:项目管理工具,用于执行各种管理任务。

my_first_django_project文件夹中,通常会有一个或多个应用(app),每个应用有自己的文件结构,但基本结构相似,包含模型(model.py)、视图(views.py)、模板(templates)和URL配置(urls.py)等。通过startapp命令可以创建新的应用。

创建项目后,启动开发服务器:

shell 复制代码
python manage.py runserver

然后在浏览器中访问http://127.0.0.1:8000/,你应该能看到Django的欢迎页面,表示项目已经成功创建并运行。

第三章:模型层(Model)

概念和作用:

在Django中,模型是与数据库交互的核心部分,用于定义数据结构和数据之间的关系。每个模型类对应数据库中的一张表,每个模型类的属性对应表中的字段。通过模型,可以轻松地进行数据库操作,包括创建、读取、更新和删除数据。

定义模型类和字段:

  1. 创建应用 :首先,在Django项目中创建一个应用(app),使用manage.pystartapp命令。

  2. 定义模型类 :在应用中的models.py文件中定义模型类,每个类对应一个数据表。

    复制代码
    from django.db import models
    
    class Product(models.Model):
        name = models.CharField(max_length=100)
        price = models.DecimalField(max_digits=8, decimal_places=2)
        description = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
  3. 字段类型 :Django提供了多种字段类型,如CharField(字符型)、IntegerField(整型)、DecimalField(十进制数)、TextField(文本型)、DateTimeField(日期时间型)等,适用于不同类型的数据。

  4. 字段选项 :每个字段可以使用各种选项来定义其行为,如max_length(最大长度)、default(默认值)、unique(唯一性)、auto_now_add(自动添加当前时间)等。

Django的ORM及使用方法:

  1. ORM概念:对象关系映射(ORM)是一种编程技术,将数据库表映射为对象,使开发者可以通过面向对象的方式操作数据库,而无需直接编写SQL语句。

  2. 模型操作:通过模型类可以执行各种数据库操作,如创建新数据、查询数据、更新数据和删除数据。

    • 创建数据

      复制代码
      product = Product(name='Phone', price=999.99, description='Smartphone')
      product.save()
    • 查询数据

      复制代码
      products = Product.objects.all()  # 查询所有数据
      product = Product.objects.get(id=1)  # 根据条件查询单个数据
    • 更新数据

      复制代码
      product = Product.objects.get(id=1)
      product.price = 899.99
      product.save()
    • 删除数据

      复制代码
      product = Product.objects.get(id=1)
      product.delete()
  3. 查询集(QuerySet) :查询操作返回的是查询集,可以对查询集进行进一步筛选、排序和限制。

    复制代码
    products = Product.objects.filter(price__gte=500)  # 价格大于等于500的产品
    products = products.order_by('-price')  # 按价格降序排序
    products = products[:5]  # 只取前5个产品
  4. 关联关系:通过外键(ForeignKey)和多对多字段(ManyToManyField)可以定义模型之间的关联关系,实现数据表之间的关联。

    复制代码
    class Category(models.Model):
        name = models.CharField(max_length=50)
    
    class Product(models.Model):
        name = models.CharField(max_length=100)
        category = models.ForeignKey(Category, on_delete=models.CASCADE)
  5. 迁移操作:每当更改模型类时,需要生成并应用迁移以更新数据库结构。

    复制代码
    python manage.py makemigrations
    python manage.py migrate

通过模型定义和ORM操作,开发者可以轻松地管理和操作数据库中的数据,实现数据持久化和交互。

第四章:视图层(View)

作用和功能:

在Django中,视图层是处理用户请求的核心部分,它负责接收来自客户端的请求,处理业务逻辑,然后将结果呈现给用户。视图的主要功能包括接收请求参数、调用模型进行数据处理、执行逻辑操作、以及决定如何响应用户(如渲染模板,返回JSON数据等)。

编写视图函数处理用户请求:

  1. 定义视图函数 :在views.py中,创建一个函数来处理特定的HTTP请求(如GET、POST等)。

    复制代码
    from django.shortcuts import render
    from .models import Product
    
    def product_list(request):
        products = Product.objects.all()
        return render(request, 'product_list.html', {'products': products})
  2. 接收请求参数 :视图函数可以接收request对象,该对象包含了用户请求的所有信息,如GET参数、POST数据等。

  3. 调用模型:视图可以调用模型的方法来获取数据或执行其他操作。

  4. 响应生成:视图函数通常会返回一个响应,可能是HTML模板、JSON数据、重定向等。

视图的装饰器和通用视图的应用:

  1. 装饰器 :Django提供了许多装饰器来增强视图的功能,如login_required(需要登录)、permission_required(需要特定权限)等。例如,限制只有管理员才能访问某个视图:

    复制代码
    from django.contrib.auth.decorators import login_required
    
    @login_required
    def admin_view(request):
        # ...
  2. 通用视图 :Django提供了一些高级视图,如ListViewDetailViewCreateViewUpdateViewDeleteView等,用于处理常见的CRUD(创建、读取、更新和删除)操作。这些视图简化了视图的编写,只需要定义一些额外的参数和模型关系,如:

    复制代码
    from django.views.generic import ListView
    
    class ProductListView(ListView):
        model = Product
        template_name = 'product_list.html'

通用视图通常与模板和URL配置结合使用,提供了一种更为模块化的开发方式。

通过视图层,你可以将业务逻辑与HTTP请求分离,使得代码更易于理解和维护。同时,装饰器和通用视图的使用可以提高开发效率和代码的重用性。

第五章:模板层(Template)

基本语法和特性:

Django模板语言是一种轻量级的模板语言,用于在HTML中嵌入动态数据和逻辑。基本语法包括变量、标签和过滤器:

  • 变量 :用{{ variable }}表示,用于在模板中插入动态数据。
  • 标签 :用{% tag %}表示,用于控制模板的逻辑,如if语句、for循环等。
  • 过滤器 :用{{ variable|filter }}表示,用于对变量进行处理,如格式化日期、字符串截取等。

使用模板渲染数据:

  1. 创建模板文件 :在templates目录下创建HTML文件,编写模板代码。

  2. 传递数据:在视图函数中将数据传递给模板进行渲染。

    复制代码
    from django.shortcuts import render
    
    def product_list(request):
        products = Product.objects.all()
        return render(request, 'product_list.html', {'products': products})
  3. 渲染模板:在模板中使用变量和标签来展示数据。

    复制代码
    <ul>
        {% for product in products %}
            <li>{{ product.name }}</li>
        {% endfor %}
    </ul>

模板继承、过滤器和标签的使用方法:

  1. 模板继承 :可以通过继承基础模板来重用通用的页面结构,子模板可以覆盖或扩展父模板的内容。例如,创建一个基础模板base.html

    复制代码
    <!DOCTYPE html>
    <html>
    <head>
        <title>{% block title %}My Site{% endblock %}</title>
    </head>
    <body>
        {% block content %}
        {% endblock %}
    </body>
    </html>

    子模板可以继承并覆盖父模板的内容:

    复制代码
    {% extends 'base.html' %}
    
    {% block title %}Product List{% endblock %}
    
    {% block content %}
    <ul>
        {% for product in products %}
            <li>{{ product.name }}</li>
        {% endfor %}
    </ul>
    {% endblock %}
  2. 过滤器 :Django提供了许多内置的过滤器,用于对数据进行处理和格式化。例如,将日期格式化为YYYY-MM-DD

    复制代码
    <p>{{ product.created_at|date:"Y-m-d" }}</p>
  3. 标签:Django模板标签用于控制模板的逻辑流程,如if语句、for循环等。例如,使用if标签根据条件显示不同内容:

    复制代码
    {% if product.price > 100 %}
        <p>Expensive</p>
    {% else %}
        <p>Affordable</p>
    {% endif %}

模板层是将动态数据呈现给用户的重要部分,模板继承、过滤器和标签的灵活运用可以使模板更具可复用性和可维护性,同时提升用户体验。

第六章:路由与URL配置

URLconf的概念和作用:

URLconf(URL configuration)是Django中用于配置URL模式和视图函数映射关系的机制。它定义了用户访问网站时不同URL路径应该由哪个视图函数来处理。URLconf通常由项目级别的URLconf和应用级别的URLconf组成,通过URL模式来匹配用户请求的URL,并将其分发给相应的视图函数处理。

配置URL模式和视图函数的映射关系:

  1. 项目级别URLconf :在项目的urls.py文件中配置项目级别的URL模式。

    复制代码
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('products/', include('products.urls')),
    ]
  2. 应用级别URLconf :在应用的urls.py文件中配置应用级别的URL模式,并指定对应的视图函数。

    复制代码
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),
        path('product/<int:product_id>/', views.product_detail, name='product_detail'),
    ]
  3. 视图函数 :在应用的views.py文件中编写视图函数来处理用户请求,并返回相应的响应。

    复制代码
    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import Product
    
    def index(request):
        return render(request, 'index.html')
    
    def product_detail(request, product_id):
        product = Product.objects.get(id=product_id)
        return render(request, 'product_detail.html', {'product': product})

正则表达式在URL配置中的应用:

在URLconf中,可以使用正则表达式来匹配更复杂的URL模式,以满足特定的路由需求。例如,使用正则表达式匹配特定格式的商品ID:

复制代码
from django.urls import path
from . import views

urlpatterns = [
    path('product/(?P<product_id>\d+)/', views.product_detail, name='product_detail'),
]

在上面的例子中,(?P<product_id>\d+)部分使用了正则表达式,匹配一个或多个数字作为商品ID,并将匹配到的内容作为product_id参数传递给视图函数。

正则表达式的灵活性使得我们可以更精确地定义URL模式,实现更复杂的路由规则,从而提高网站的灵活性和可扩展性。

第七章:Admin后台管理

Django提供的Admin后台管理功能:

Django提供了强大的Admin后台管理功能,可以让开发者方便地管理网站的数据,包括对数据库中的模型进行增删改查操作。Admin后台管理界面自动生成,可以自定义显示的字段、过滤器、搜索框等,同时也提供了权限管理功能,可以控制不同用户的访问权限。

自定义Admin后台界面:

  1. 注册模型到Admin后台 :在应用的admin.py文件中注册需要管理的模型。

    复制代码
    from django.contrib import admin
    from .models import Product
    
    admin.site.register(Product)
  2. 自定义Admin后台显示 :可以通过在模型的Admin类中定义list_displaylist_filtersearch_fields等属性来自定义Admin后台界面的显示。

    复制代码
    from django.contrib import admin
    from .models import Product
    
    @admin.register(Product)
    class ProductAdmin(admin.ModelAdmin):
        list_display = ('name', 'price', 'stock')
        list_filter = ('category',)
        search_fields = ('name', 'description')

在Admin后台管理数据库中的数据:

  1. 登录Admin后台:在浏览器中访问/admin路径,并使用超级用户账号登录。
  2. 查看数据:在Admin后台界面中,可以看到注册的模型,点击进入相应的模型管理页面,可以查看、添加、编辑、删除数据库中的数据。
  3. 添加数据:在模型管理页面中,点击"Add"按钮,填写相应字段的数值,然后保存即可添加数据。
  4. 编辑数据:在模型管理页面中,点击数据行右侧的"Change"按钮,修改相应字段的数值,然后保存即可编辑数据。
  5. 删除数据:在模型管理页面中,勾选要删除的数据行左侧的复选框,然后点击页面底部的"Delete selected"按钮,确认删除即可删除数据。

通过Admin后台管理功能,开发者可以方便地管理数据库中的数据,快速进行数据的增删改查操作,提高开发效率和管理便利性。

第八章:表单处理与验证

Django表单的概念和作用:

在Web开发中,表单是用户与网站进行交互的重要方式,用户可以通过表单向网站提交数据。Django的表单功能可以帮助开发者快速创建表单、处理用户提交的数据,并进行验证。表单类定义了表单的字段和验证规则,可以在前端页面渲染表单,接收用户输入的数据,然后进行处理和验证。

创建表单类和处理用户提交的表单数据:

  1. 创建表单类 :在Django应用中的forms.py文件中定义表单类,继承自forms.Formforms.ModelForm

    复制代码
    from django import forms
    
    class ContactForm(forms.Form):
        name = forms.CharField(label='Your Name', max_length=100)
        email = forms.EmailField(label='Your Email')
        message = forms.CharField(widget=forms.Textarea)
  2. 渲染表单到前端页面:在视图函数中实例化表单类,并传递给前端页面进行渲染。

    复制代码
    from django.shortcuts import render
    from .forms import ContactForm
    
    def contact_view(request):
        form = ContactForm()
        return render(request, 'contact.html', {'form': form})
  3. 处理用户提交的表单数据 :在视图函数中通过POST请求获取用户提交的数据,实例化表单类并传入request.POST,然后进行数据验证和处理。

    复制代码
    def contact_view(request):
        if request.method == 'POST':
            form = ContactForm(request.POST)
            if form.is_valid():
                # 处理有效的表单数据
            else:
                # 处理表单验证失败的情况
        else:
            form = ContactForm()
        return render(request, 'contact.html', {'form': form})

表单验证和错误处理的方法:

  1. 表单验证 :Django的表单类提供了各种字段验证器,可以在字段定义时设置验证规则,也可以在表单类中定义clean_<field_name>()方法进行自定义验证。
  2. 错误处理 :在前端页面中可以通过{{ form.field_name.errors }}显示字段验证错误信息,也可以通过{{ form.non_field_errors }}显示表单级别的错误信息。在视图函数中,可以通过form.errors获取所有错误信息。

通过Django的表单处理与验证功能,开发者可以轻松创建表单、处理用户提交的数据,并进行有效的数据验证和错误处理,保证用户输入的数据符合要求,提高网站的安全性和用户体验。

第九章:用户认证与权限控制

Django中用户认证和权限控制的机制:

Django框架内置了一套用户认证系统,提供了用户注册、登录、注销、权限控制等功能。用户认证系统主要包括User模型、用户组(Groups)、权限(Permissions)等概念。

  1. User模型 :Django内置的User模型定义了用户的基本信息,如用户名、密码、邮箱等。可以通过django.contrib.auth.get_user_model()获取用户模型,以便在应用中使用。
  2. 用户注册:通过定义一个表单类来处理用户注册时提交的数据,然后在视图函数中实例化该表单,并验证用户输入的数据。注册成功后,可以将用户数据保存到数据库中。
  3. 用户登录 :登录过程包括验证用户名和密码。Django提供了authenticate()函数来验证用户身份,验证成功后,可以使用login()函数将用户登录状态保存在会话(Session)中。
  4. 用户注销 :用户注销功能可以通过logout()函数实现,该函数会清除用户会话中的信息,从而结束用户的登录状态。
  5. 权限控制:Django通过用户、用户组、权限三者之间的关系来实现权限控制。权限分为对象权限和组权限,用户可以通过加入用户组来获得组权限,也可以直接分配对象权限。

如何实现用户注册、登录和注销功能:

  1. 用户注册:创建一个注册表单,并在视图函数中处理表单提交的数据,验证无误后保存用户信息到数据库,并创建用户会话。
  2. 用户登录 :创建一个登录表单,并在视图函数中处理表单提交的数据,验证用户身份后使用login()函数保存登录状态。
  3. 用户注销 :在视图函数中实现注销逻辑,调用logout()函数清除会话信息。

如何管理用户权限和角色:

  1. 用户组管理:通过Django的管理界面可以创建和管理用户组,并为用户分配组成员身份。
  2. 权限分配:在Django中,权限可以通过模型权限和中间件权限两种方式进行分配。模型权限关联到Django的模型上,中间件权限是全局的权限,可以被特定的用户或用户组继承。
  3. 权限验证 :在视图函数中,可以通过has_perm()方法来检查用户是否有执行某操作的权限,也可以在模板中通过{% if user.has_perm('app_label.model_name') %}来判断权限。

通过Django的用户认证与权限控制机制,开发者可以为网站提供安全、灵活的用户管理方案,确保只有授权用户才能访问特定的资源和操作,从而保护网站的数据和功能安全。

第十章:RESTful API开发

RESTful API的概念和设计原则:

REST(Representational State Transfer)是一种设计风格,用于构建分布式系统和网络应用。RESTful API是符合REST架构风格的API,具有以下设计原则:

  1. 基于资源:将数据和功能看作资源,每个资源通过唯一的URL进行标识。
  2. 统一接口:使用统一的接口进行交互,如HTTP方法(GET、POST、PUT、DELETE等)。
  3. 无状态性:每个请求都包含足够的信息来处理,服务器不保存客户端的状态。
  4. 资源关系:通过URL表示资源之间的关系,如嵌套URL表示资源之间的层级关系。
  5. 状态转移:客户端通过操作资源的表现形式来进行状态转移,如GET获取资源、POST创建资源等。

如何使用Django REST framework构建API接口:

  1. 安装Django REST framework:通过pip安装djangorestframework库。
  2. 创建序列化器(Serializers):定义资源的序列化和反序列化规则。
  3. 创建视图集(ViewSets):定义处理API请求的视图集,包括列表、详情、创建、更新、删除等操作。
  4. 配置URL路由:将视图集映射到URL,并配置路由。
  5. 配置权限和认证:通过Django REST framework提供的权限和认证类来控制API的访问权限。

API的认证、权限控制和版本管理:

  1. 认证:Django REST framework提供了多种认证方式,如基本认证、Token认证、Session认证、JWT认证等。可以在视图或全局配置中设置认证类。
  2. 权限控制:通过Django REST framework提供的权限类来控制用户对API资源的访问权限,如IsAuthenticated、IsAdminUser、AllowAny等。
  3. 版本管理 :可以通过URL版本控制或Accept头部版本控制来管理API的版本。在Django REST framework中,可以使用rest_framework.versioning模块来实现版本管理。

通过使用Django REST framework构建RESTful API,可以快速、灵活地开发API接口,提供给前端应用或第三方服务使用。同时,通过认证、权限控制和版本管理,可以确保API的安全性和稳定性,为用户提供良好的使用体验。

第十一章:性能优化与安全防护

常见的性能优化技巧和最佳实践:

  1. 缓存:使用缓存可以减少数据库查询和计算量,提高应用的性能。可以使用Django缓存框架来实现缓存,如Memcached、Redis、FileBasedCache等。
  2. 静态文件:使用CDN(内容分发网络)来加速静态文件的访问,减少服务器压力。
  3. 数据库优化:使用数据库索引、分表、分库等技术来优化数据库性能。
  4. 异步处理:将一些耗时的操作放到异步队列中处理,避免阻塞主线程。
  5. 代码优化:使用Django调试工具和Python profiler来分析代码的性能瓶颈,进行优化。

防范常见的Web安全攻击:

  1. SQL注入:使用参数化查询和预编译语句来防止SQL注入攻击。
  2. XSS:使用Django的安全过滤器和CSP(内容安全策略)来防止XSS攻击。
  3. CSRF:使用Django的CSRF保护机制来防止CSRF攻击。
  4. Clickjacking:使用X-Frame-Options头部和Frame-Ancestors CSP指令来防止Clickjacking攻击。
  5. DoS/DDoS:使用流量控制和限速来防止DoS/DDoS攻击。

对Django应用进行性能测试和安全审计:

  1. 性能测试:使用Django调试工具和Python profiler来分析代码的性能瓶颈,进行优化。可以使用Apache Benchmark(ab)、Locust等工具来进行性能测试。
  2. 安全审计:使用Django的安全过滤器和Python安全工具库来检查代码的安全性,进行修复。可以使用OWASP ZAP、Burp Suite等工具来进行安全审计。

通过对Django应用进行性能优化和安全防护,可以确保应用的高性能和安全性,为用户提供良好的使用体验。同时,通过定期的性能测试和安全审计,可以及时发现和修复潜在的问题,提高应用的稳定性和可靠性。

附录:常见问题解答和进阶学习资源

AD:首页 | 一个覆盖广泛主题工具的高效在线平台(amd794.com)

常见问题解答:

  1. Q:如何处理Django中的大文件上传? A:可以使用Django的FileField配合如django-storages库(如Amazon S3、Google Cloud Storage等)处理大文件存储。
  2. Q:如何在Django中实现用户权限管理? A:使用Django的内置权限系统(如permissions模块)或第三方库如django-guardian进行更细粒度的权限控制。
  3. Q:如何处理数据库迁移问题? A:确保每次改动数据库结构后,使用makemigrationsmigratesyncdb正确地更新迁移文件,并在生产环境中使用--fake选项模拟迁移。

进阶学习资源:

  1. 书籍:

    • Pro Django: Expert Solutions for Real-World Django Development
    • Django for Beginners: A Hands-On Guide to Mastering Django 3.x
    • Django 3.2 Unofficial Documentation
  2. 在线课程:

    • Django官方文档(https://docs.djangoproject.com/)
    • Udemy上的《Django 3.x - The Complete Guide for Beginners》
    • Coursera上的《Full Stack Web Development with Django》
  3. 博客和社区:

  4. GitHub项目和库:

  5. 技术论坛和问答平台:

相关推荐
阿昌喜欢吃黄桃16 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
半夜修仙17 天前
延迟队列的介绍及常见问题
java·数据库·中间件·rabbitmq
手握风云-17 天前
一条消息的旅程:RabbitMQ 学习与实践(一)
中间件·rabbitmq
RH23121117 天前
2026.6.8Linux
java·数据库·中间件
理人综艺好会18 天前
双Token机制在实际项目中的应用与实践
中间件·token
番茄去哪了19 天前
神领物流面试题(一)
java·大数据·中间件
念何架构之路19 天前
消息中间件
中间件
都说名字长不会被发现19 天前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
瀚高PG实验室19 天前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
之歆20 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express