Jupyter AI

18 Django视图之视图和模型的交互

📅 发表日期: 2024年8月10日

分类: 🌐Django 入门

👁️阅读: --

在上一篇教程中,我们介绍了如何配置Django的URL,这为我们接下来的视图逻辑打下了基础。本篇文章将重点讨论Django视图与模型的交互,帮助你理解如何通过视图来处理数据并与模型进行交互。

理解视图与模型的关系

在Django中,视图是处理HTTP请求和返回HTTP响应的函数或类,而模型则是定义数据结构和数据库交互的类。视图和模型之间的交互是通过Django的ORM(对象关系映射)来实现的。

基本模型

首先,我们需要定义一个模型。假设我们正在创建一个简单的博客应用,其中包含文章(Article)模型。我们可以在models.py中定义如下:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

在这个Article模型中,我们定义了三个字段:titlecontent,和created_at。每当一个新的Article实例被创建时,created_at字段会自动保存创建时间。

创建视图

接下来,我们需要在视图中处理与模型的交互。例如,我们想要显示所有的文章列表。我们可以在views.py中定义一个视图来完成这个任务:

from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()  # 从数据库获取所有文章
    return render(request, 'article_list.html', {'articles': articles})

在上面的代码中,我们创建了一个名为article_list的视图。这个视图使用Article.objects.all()方法从数据库中获取所有文章,并将其传递给模板article_list.html

配置URL

我们需要在urls.py中配置这个视图,以便用户可以访问文章列表页面:

from django.urls import path
from .views import article_list

urlpatterns = [
    path('articles/', article_list, name='article_list'),
]

现在,访问/articles/路径时,会触发article_list视图并显示所有文章。

使用模板展示数据

接下来,我们需要创建一个模板来展示文章的信息。在templates/article_list.html文件中,我们可以这样编写模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Article List</title>
</head>
<body>
    <h1>Articles</h1>
    <ul>
        {% for article in articles %}
            <li>
                <h2>{{ article.title }}</h2>
                <p>{{ article.content }}</p>
                <small>Created at {{ article.created_at }}</small>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

在这个模板中,我们使用了Django的模板语言把articles变量中的每一篇文章的标题、内容和创建时间都展示出来。

处理文章的创建

除了展示文章,我们也希望能够创建新的文章。我们可以为此创建一个新的视图和模板。

首先,在views.py中添加一个用于处理文章创建的视图:

from django.shortcuts import redirect
from django.http import HttpResponse
from .forms import ArticleForm

def create_article(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()  # 保存到数据库
            return redirect('article_list')  # 创建成功,重定向到文章列表
    else:
        form = ArticleForm()
    return render(request, 'create_article.html', {'form': form})

在这个视图中,我们通过ArticleForm来处理表单输入。当接收到POST请求时,我们验证数据并保存到数据库,成功后重定向到文章列表。

创建表单

我们需要创建ArticleForm类,用于处理文章的输入。在forms.py中:

from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content']

这个表单将生成一个用于输入文章标题和内容的表单。

创建文章的模板

创建一个新的模板create_article.html,用于展示文章创建的表单:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Article</title>
</head>
<body>
    <h1>Create New Article</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</body>
</html>

注意这里我们使用了{% csrf_token %}来防止跨站请求伪造攻击。

总结

在这一篇中,我们学习了如何通过Django视图和模型进行交互,创建和展示文章列表,以及如何创建新的文章。视图负责处理逻辑,而模型则负责与数据库的交互。在下一篇中,我们将深入了解Django模板语言,通过动态生成HTML来渲染数据。

希望你已经对视图和模型的交互有了清晰的认识,现在你可以开始构建你的应用了!

🌐Django 入门 (滚动鼠标查看)