📅  最后修改于: 2023-12-03 15:39:19.689000             🧑  作者: Mango
在 Django 中,我们需要将用户与其上传(发布)的内容相关联,以便我们可以按用户筛选和显示内容或提供访问权限等。
首先,我们需要启用 Django 的用户认证系统。Django 目前默认使用的是基于 Cookie 的身份验证,用户在登录后会得到一个 session ID。我们可以使用以下几种方式将用户与其上传的内容相关联:
继承 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 相关联。
给模型添加一个指向 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
字段也是一个外键,用于将文章与其作者相关联。
我们可以在视图中使用以下方式来关联上传者和其上传的内容:
使用 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
中获取的。我们将其添加到了创建的文章对象中。
使用 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 中的相关字段值来关联上传者和其上传的内容。