📜  将用户与其在 Django 中的上传(发布)相关联(1)

📅  最后修改于: 2023-12-03 15:39:19.689000             🧑  作者: Mango

将用户与其在 Django 中的上传(发布)相关联

在 Django 中,我们需要将用户与其上传(发布)的内容相关联,以便我们可以按用户筛选和显示内容或提供访问权限等。

用户认证

首先,我们需要启用 Django 的用户认证系统。Django 目前默认使用的是基于 Cookie 的身份验证,用户在登录后会得到一个 session ID。我们可以使用以下几种方式将用户与其上传的内容相关联:

1. 继承 User 模型

继承 Django 内置的 User 模型,并在新模型中添加字段来表示上传者。例如:

from django.db import models
from django.contrib.auth.models import User

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

这里的 author 字段是一个外键,将与模型 User 相关联。

2. 给模型添加一个 User 外键

给模型添加一个指向 User 模型的外键,并将上传者作为外键的值。例如:

from django.db import models
from django.contrib.auth.models import User

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

这里的 author 字段也是一个外键,用于将文章与其作者相关联。

视图

我们可以在视图中使用以下方式来关联上传者和其上传的内容:

1. 获取当前登录用户的 ID

使用 request.user.id 来获取当前登录用户的 ID,然后将该 ID 添加到上传的内容中。例如:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Article

@login_required
def create_article(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        content = request.POST.get('content')
        article = Article(title=title, content=content, author_id=request.user.id)
        article.save()
        return render(request, 'success.html')
    return render(request, 'create-article.html')

在这个视图中,上传者的 ID 是从 request.user.id 中获取的。我们将其添加到了创建的文章对象中。

2. 使用 Django Form

使用 Django Form 可以更方便地与用户上传的内容相关联。例如:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Article
from .forms import ArticleForm

@login_required
def create_article(request):
    form = ArticleForm(request.POST or None)
    if form.is_valid():
        form.instance.author = request.user
        form.save()
        return render(request, 'success.html')
    return render(request, 'create-article.html', {'form': form})

在这个视图中,我们使用了一个名为 ArticleForm 的表单类,其中的 author 字段是一个外键。在视图中,我们简单地将该字段的值设置为当前登录用户,以便将文章与其作者相关联。

总结

在 Django 中,将用户与其上传的内容相关联可以使用继承 User 模型或在模型中添加一个指向 User 模型的外键等方式。在视图中,我们可以使用 request.user.id 或 Django Form 中的相关字段值来关联上传者和其上传的内容。