Django框架的全面指南:从入门到高级

立山  金牌会员 | 2025-3-11 05:22:09 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 982|帖子 982|积分 2946

Django框架的全面指南:从入门到高级

目次


  • 弁言
  • Django简介
  • 安装与配置
  • 创建第一个Django项目
  • Django的MVT架构
  • 模子(Model)
  • 视图(View)
  • 模板(Template)
  • URL路由
  • 表单处理
  • 用户认证与权限
  • Django Admin
  • 高级主题
  • 总结
弁言

Django是一个高级Python Web框架,它鼓励快速开发和干净、实用的设计。Django遵循“Don’t Repeat Yourself”(DRY)原则,旨在资助开发者快速构建复杂的、数据库驱动的网站。无论你是初学者还是经验丰富的开发者,Django都能为你提供强大的工具和功能,资助你高效地完成项目。
本文将带你从Django的基础知识开始,逐步深入到高级主题,涵盖模子、视图、模板、URL路由、表单处理、用户认证、Django Admin等内容。我们还将通过示例代码和案例来资助你更好地明确和应用这些概念。
Django简介

Django最初是由Adrian Holovaty和Simon Willison在2003年开发的,目的是为了简化新闻网站的创建过程。自2005年发布以来,Django已经成为最受欢迎的Python Web框架之一。它被广泛应用于各种类型的项目,从小型博客到大型企业级应用。
Django的重要特点包括:


  • 快速开发:Django提供了很多内置功能,如ORM、模板引擎、表单处理等,使得开发者可以快速构建应用。
  • 安全性:Django内置了很多安全功能,如防止SQL注入、跨站脚本攻击(XSS)、跨站哀求伪造(CSRF)等。
  • 可扩展性:Django的设计答应开发者轻松地扩展和定制框架的功能。
  • 社区支持:Django拥有一个活跃的社区,提供了大量的文档、教程和第三方库。
安装与配置

在开始使用Django之前,你需要先安装它。Django可以通过Python的包管理工具pip来安装。
安装Django

打开终端或命令提示符,运行以下命令来安装Django:
  1. pip install django
复制代码
安装完成后,你可以通过以下命令来验证Django是否安装乐成:
  1. django-admin --version
复制代码
如果安装乐成,你将看到Django的版本号。
创建Django项目

安装完成后,你可以使用django-admin命令来创建一个新的Django项目。假设我们要创建一个名为myproject的项目,可以运行以下命令:
  1. django-admin startproject myproject
复制代码
这将创建一个名为myproject的目次,此中包含Django项目的基本结构。
运行开发服务器

进入项目目次并启动开发服务器:
  1. cd myproject
  2. python manage.py runserver
复制代码
默认情况下,开发服务器将在http://127.0.0.1:8000/上运行。打开欣赏器并访问该地点,你将看到Django的欢迎页面。
创建第一个Django项目

项目结构

在创建了Django项目后,你会看到以下目次结构:
  1. myproject/
  2.     manage.py
  3.     myproject/
  4.         __init__.py
  5.         settings.py
  6.         urls.py
  7.         asgi.py
  8.         wsgi.py
复制代码


  • manage.py:一个命令行工具,用于与Django项目进行交互。
  • myproject/:项目的现实Python包。

    • settings.py:项目的配置文件。
    • urls.py:项目的URL路由配置。
    • wsgi.py:用于部署项目的WSGI配置。
    • asgi.py:用于部署项目的ASGI配置。

创建应用

Django项目由多个应用(apps)构成。每个应用都是一个独立的模块,负责处理特定的功能。我们可以使用manage.py来创建一个新的应用。
假设我们要创建一个名为blog的应用,可以运行以下命令:
  1. python manage.py startapp blog
复制代码
这将创建一个名为blog的目次,此中包含应用的基本结构。
注册应用

创建应用后,我们需要将其添加到项目的INSTALLED_APPS设置中。打开myproject/settings.py文件,找到INSTALLED_APPS列表,并添加blog应用:
  1. INSTALLED_APPS = [
  2.     'django.contrib.admin',
  3.     'django.contrib.auth',
  4.     'django.contrib.contenttypes',
  5.     'django.contrib.sessions',
  6.     'django.contrib.messages',
  7.     'django.contrib.staticfiles',
  8.     'blog',  # 添加blog应用
  9. ]
复制代码
Django的MVT架构

Django遵循MVT(Model-View-Template)架构模式,这与传统的MVC(Model-View-Controller)模式类似。MVT架构将应用步伐分为三个重要部分:


  • Model:负责处理与数据库的交互,定义数据结构。
  • View:负责处理业务逻辑,接收哀求并返回相应。
  • Template:负责处理用户界面的出现,生成HTML页面。
MVT工作流程


  • 哀求到达:用户通过欣赏器发送哀求到Django应用。
  • URL路由:Django根据URL路由配置将哀求分发到相应的视图。
  • 视图处理:视图处理哀求,大概会与模子交互以获取数据。
  • 模板渲染:视图将数据传递给模板,模板生成HTML页面。
  • 相应返回:Django将生成的HTML页面作为相应返回给用户。
模子(Model)

模子是Django中与数据库交互的核心部分。每个模子类对应数据库中的一张表,模子类的属性对应表中的字段。
创建模子

假设我们要创建一个简朴的博客应用,此中包含Post模子来表示博客文章。打开blog/models.py文件,并添加以下代码:
  1. from django.db import models
  2. class Post(models.Model):
  3.     title = models.CharField(max_length=200)
  4.     content = models.TextField()
  5.     pub_date = models.DateTimeField(auto_now_add=True)
  6.     def __str__(self):
  7.         return self.title
复制代码
在这个例子中,我们定义了一个Post模子,它有三个字段:


  • title:文章的标题,类型为CharField,最大长度为200个字符。
  • content:文章的内容,类型为TextField,可以存储大量文本。
  • pub_date:文章的发布日期,类型为DateTimeField,auto_now_add=True表示在创建对象时主动设置为当前时间。
迁移数据库

在定义模子后,我们需要将其应用到数据库中。Django使用迁移(migration)来管理数据库模式的变化。运行以下命令来创建并应用迁移:
  1. python manage.py makemigrations
  2. python manage.py migrate
复制代码
makemigrations命令会生成迁移文件,migrate命令会将迁移应用到数据库中。
使用Django Shell操作模子

Django提供了一个交互式的Python shell,可以方便地操作模子。运行以下命令启动Django shell:
  1. python manage.py shell
复制代码
在shell中,你可以创建、查询、更新和删除模子对象。例如:
  1. from blog.models import Post
  2. # 创建一篇新文章
  3. post = Post(title="我的第一篇博客", content="这是博客的内容。")
  4. post.save()
  5. # 查询所有文章
  6. posts = Post.objects.all()
  7. for post in posts:
  8.     print(post.title, post.pub_date)
  9. # 更新文章
  10. post.title = "更新后的标题"
  11. post.save()
  12. # 删除文章
  13. post.delete()
复制代码
视图(View)

视图是Django中处理业务逻辑的部分。它接收HTTP哀求并返回HTTP相应。视图可以是函数或类。
函数视图

最简朴的视图是函数视图。打开blog/views.py文件,并添加以下代码:
  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from .models import Post
  4. def index(request):
  5.     posts = Post.objects.all()
  6.     return render(request, 'blog/index.html', {'posts': posts})
  7. def post_detail(request, post_id):
  8.     post = Post.objects.get(id=post_id)
  9.     return render(request, 'blog/post_detail.html', {'post': post})
复制代码
在这个例子中,我们定义了两个视图函数:


  • index:显示全部博客文章的列表。
  • post_detail:显示单篇博客文章的具体信息。
类视图

Django还提供了基于类的视图(Class-Based Views,CBV),它们比函数视图更灵活和强大。例如,我们可以使用ListView和DetailView来简化视图的编写:
  1. from django.views.generic import ListView, DetailView
  2. from .models import Post
  3. class PostListView(ListView):
  4.     model = Post
  5.     template_name = 'blog/index.html'
  6.     context_object_name = 'posts'
  7. class PostDetailView(DetailView):
  8.     model = Post
  9.     template_name = 'blog/post_detail.html'
  10.     context_object_name = 'post'
复制代码
URL路由

为了让视图可以或许处理哀求,我们需要将其映射到URL。打开blog/urls.py文件(如果不存在,请创建它),并添加以下代码:
  1. from django.urls import path
  2. from . import views
  3. urlpatterns = [
  4.     path('', views.index, name='index'),
  5.     path('post/<int:post_id>/', views.post_detail, name='post_detail'),
  6. ]
复制代码
然后,将blog应用的URL配置包含到项目的urls.py中:
  1. from django.contrib import admin
  2. from django.urls import include, path
  3. urlpatterns = [
  4.     path('admin/', admin.site.urls),
  5.     path('blog/', include('blog.urls')),
  6. ]
复制代码
现在,你可以通过以下URL访问博客应用:


  • http://127.0.0.1:8000/blog/:显示全部博客文章的列表。
  • http://127.0.0.1:8000/blog/post/1/:显示ID为1的博客文章的具体信息。
模板(Template)

模板是Django中用于生成HTML页面的部分。Django使用自己的模板语言(DTL)来动态生成内容。
创建模板

在blog应用目次下创建一个名为templates/blog/的目次,并在此中创建两个模板文件:index.html和post_detail.html。
index.html:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>博客首页</title>
  5. </head>
  6. <body>
  7.     <h1>博客文章列表</h1>
  8.     <ul>
  9.         {% for post in posts %}
  10.             <li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>
  11.         {% endfor %}
  12.     </ul>
  13. </body>
  14. </html>
复制代码
post_detail.html:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>{{ post.title }}</title>
  5. </head>
  6. <body>
  7.     <h1>{{ post.title }}</h1>
  8.     <p>{{ post.content }}</p>
  9.     <p>发布日期:{{ post.pub_date }}</p>
  10. </body>
  11. </html>
复制代码
模板继续

Django的模板体系支持模板继续,答应你创建一个基础模板,并在其他模板中扩展它。例如,我们可以创建一个基础模板base.html:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>{% block title %}我的博客{% endblock %}</title>
  5. </head>
  6. <body>
  7.     <header>
  8.         <h1>我的博客</h1>
  9.     </header>
  10.     <main>
  11.         {% block content %}{% endblock %}
  12.     </main>
  13.     <footer>
  14.         <p>&copy; 2023 我的博客</p>
  15.     </footer>
  16. </body>
  17. </html>
复制代码
然后,在index.html和post_detail.html中扩展基础模板:
index.html:
  1. {% extends 'blog/base.html' %}
  2. {% block title %}博客首页{% endblock %}
  3. {% block content %}
  4.     <h1>博客文章列表</h1>
  5.     <ul>
  6.         {% for post in posts %}
  7.             <li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>
  8.         {% endfor %}
  9.     </ul>
  10. {% endblock %}
复制代码
post_detail.html:
  1. {% extends 'blog/base.html' %}
  2. {% block title %}{{ post.title }}{% endblock %}
  3. {% block content %}
  4.     <h1>{{ post.title }}</h1>
  5.     <p>{{ post.content }}</p>
  6.     <p>发布日期:{{ post.pub_date }}</p>
  7. {% endblock %}
复制代码
表单处理

Django提供了强大的表单处理功能,可以轻松地创建和处理HTML表单。
创建表单

假设我们要创建一个表单,答应用户提交新的博客文章。首先,在blog/forms.py文件中定义一个表单类:
  1. from django import forms
  2. from .models import Post
  3. class PostForm(forms.ModelForm):
  4.     class Meta:
  5.         model = Post
  6.         fields = ['title', 'content']
复制代码
处理表单提交

接下来,我们需要在视图中处理表单的提交。打开blog/views.py文件,并添加以下代码:
  1. from django.shortcuts import render, redirect
  2. from .forms import PostForm
  3. def create_post(request):
  4.     if request.method == 'POST':
  5.         form = PostForm(request.POST)
  6.         if form.is_valid():
  7.             form.save()
  8.             return redirect('index')
  9.     else:
  10.         form = PostForm()
  11.     return render(request, 'blog/create_post.html', {'form': form})
复制代码
创建模板

在templates/blog/目次下创建一个名为create_post.html的模板文件:
  1. {% extends 'blog/base.html' %}
  2. {% block title %}创建新文章{% endblock %}
  3. {% block content %}
  4.     <h1>创建新文章</h1>
  5.     <form method="post">
  6.         {% csrf_token %}
  7.         {{ form.as_p }}
  8.         <button type="submit">提交</button>
  9.     </form>
  10. {% endblock %}
复制代码
URL路由

末了,将create_post视图映射到URL。打开blog/urls.py文件,并添加以下代码:
  1. from django.urls import path
  2. from . import views
  3. urlpatterns = [
  4.     path('', views.index, name='index'),
  5.     path('post/<int:post_id>/', views.post_detail, name='post_detail'),
  6.     path('create/', views.create_post, name='create_post'),
  7. ]
复制代码
现在,你可以通过http://127.0.0.1:8000/blog/create/访问创建新文章的页面。
用户认证与权限

Django内置了用户认证体系,可以轻松地处理用户注册、登录、注销等功能。
用户注册

要答应用户注册,我们可以使用Django的UserCreationForm。打开blog/views.py文件,并添加以下代码:
  1. from django.contrib.auth.forms import UserCreationForm
  2. from django.contrib.auth import login
  3. def register(request):
  4.     if request.method == 'POST':
  5.         form = UserCreationForm(request.POST)
  6.         if form.is_valid():
  7.             user = form.save()
  8.             login(request, user)
  9.             return redirect('index')
  10.     else:
  11.         form = UserCreationForm()
  12.     return render(request, 'blog/register.html', {'form': form})
复制代码
用户登录

Django提供了LoginView来处理用户登录。打开blog/urls.py文件,并添加以下代码:
  1. from django.contrib.auth import views as auth_views
  2. urlpatterns = [
  3.     path('', views.index, name='index'),
  4.     path('post/<int:post_id>/', views.post_detail, name='post_detail'),
  5.     path('create/', views.create_post, name='create_post'),
  6.     path('register/', views.register, name='register'),
  7.     path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),
  8.     path('logout/', auth_views.LogoutView.as_view(), name='logout'),
  9. ]
复制代码
用户权限

Django还提供了权限体系,答应你控制用户对特定资源的访问。例如,我们可以限制只有登任命户才能创建新文章:
  1. from django.contrib.auth.decorators import login_required
  2. @login_required
  3. def create_post(request):
  4.     if request.method == 'POST':
  5.         form = PostForm(request.POST)
  6.         if form.is_valid():
  7.             form.save()
  8.             return redirect('index')
  9.     else:
  10.         form = PostForm()
  11.     return render(request, 'blog/create_post.html', {'form': form})
复制代码
Django Admin

Django自带了一个强大的管理界面,答应你轻松地管理数据库中的数据。
注册模子

要使用Django Admin管理Post模子,我们需要将其注册到Admin中。打开blog/admin.py文件,并添加以下代码:
  1. from django.contrib import admin
  2. from .models import Post
  3. admin.site.register(Post)
复制代码
访问Admin界面

启动开发服务器并访问http://127.0.0.1:8000/admin/,你将看到Django Admin的登录页面。使用超等用户账户登录后,你可以管理Post模子的数据。
自定义Admin界面

你可以通过自定义ModelAdmin类来定制Admin界面的显示和举动。例如:
  1. from django.contrib import admin
  2. from .models import Post
  3. class PostAdmin(admin.ModelAdmin):
  4.     list_display = ('title', 'pub_date')
  5.     list_filter = ('pub_date',)
  6.     search_fields = ('title', 'content')
  7. admin.site.register(Post, PostAdmin)
复制代码
高级主题

中间件

Django的中间件是一个轻量级的插件体系,答应你在哀求和相应的处理过程中插入自定义逻辑。你可以通过编写中间件类来实现全局的哀求处理、相应处理、异常处理等功能。
信号

Django的信号体系答应你在某些变乱发生时实行特定的操作。例如,你可以在生存模子对象时发送信号,并在信号处理函数中实行额外的逻辑。
缓存

Django提供了多种缓存后端,包括内存缓存、文件缓存、数据库缓存等。你可以通过配置缓存来提高应用的性能。
国际化

Django支持多语言应用,答应你轻松地将应用翻译成多种语言。你可以通过配置语言文件和使用翻译函数来实现国际化。
测试

Django内置了测试框架,答应你编写单元测试、集成测试和功能测试。你可以使用TestCase类来编写测试用例,并使用Client类来模拟HTTP哀求。
总结

Django是一个功能强大且灵活的Web框架,适用于各种类型的项目。通过本文的介绍,你应该已经把握了Django的基础知识,并可以或许开始构建自己的Web应用。随着你对Django的深入相识,你将发现它提供了很多高级功能和工具,可以资助你更高效地开发和维护应用。
盼望本文对你有所资助,祝你在Django的学习和开发过程中取得乐成!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表