python - Django 用户身份验证和呈现由该特定用户创建的内容?

标签 python django authentication

我正在创建一个非常简单的待办事项列表应用程序。每个用户都应该有一个具有基本 CRUD 功能的关联待办事项列表页面。这意味着用户 A 应该拥有与用户 B 不同的数据。

到目前为止,谁拥有待办事项列表没有区别。任何登录的人都可以添加、删除、显示、删除任务。

我有一种直觉,我的模型和模板中可能需要一些额外的东西。我应该提到我使用 Pinax 0.9a2。如果它能满足我的需要,我更愿意使用该解决方案。

这是我的 models.py

class Task(models.Model):
    name = models.CharField(max_length=100)
    added_at = models.DateTimeField(auto_now_add=True)
    last_update = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

这是我在views.py中的一个表单

def task_create(request):
    return create_object(request,
        model=Task,
        template_name='task_create.html',
        post_save_redirect=reverse("todo_list")
    )

这是我的 2 个模板:

创建待办事项

 <form action="" method="post">{% csrf_token %}
        {{ form.name }}
        <button type="submit" class="btn primary">Create &rarr;</button>
    </form>

待办事项列表

{% if task_list %}
    <p><a href="{% url task_create %}">Create a task</a></p>
    <ul>
    {% for task in task_list %}
        <li><a href="{% url task_detail task.id %}">{{ task.name }}</a></li>
    {% endfor %}
    </ul>
    {% else %}
        <p>No tasks to display, click to <a href="{% url task_create %}">create new</a>.</p>
    {% endif %}

最佳答案

所以您只想为其添加访问控制?

  1. ForeignKey 添加到 auth.User 到您的 ToDos 模型
  2. 重写您的列表并创建 View 以手动执行它们的工作(您可以使用基于类的新 View 来实现您的目标,但您需要首先了解它们是如何工作的)
  3. 在 ListView 中添加查询集过滤器
  4. 向表单的 save() 提供 commit=False,为检索到的对象设置用户并手动保存

代码:

class Task(models.Model):
    user = models.ForeignKey('auth.User')
    name = models.CharField(max_length=100)
    added_at = models.DateTimeField(auto_now_add=True)
    last_update = models.DateTimeField(auto_now=True)

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        exclude = ['user', ]

def task_create(request):
    form = TaskForm(data=request.POST or None)
    if request.method == 'POST' and form.is_valid():
        task = form.save(commit=False)
        task.user = request.user
        task.save()
        return reverse("todo_list")
    return render(request,
        'task_create.html',
        {'form': form}
    )

此外,在 ListView 中添加按 request.user 进行过滤,我建议使用 @login_required 装饰器,以避免未经授权的用户添加任务。

关于python - Django 用户身份验证和呈现由该特定用户创建的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10239713/

相关文章:

java - 通过 JDBC 查询登录时出现 NullPointerException 错误

python - 我如何在 Python 中序列化 json?

django - 我可以在不使用 RAM 的情况下通过 HTML 表单将大图像上传到我的服务器吗?

python - 如果已经有django项目,如何使用startproject(django-admin.py)?

android - 解析 json 提要并将详细信息保存在共享首选项中?

sql - 在 Tomcat 7 上未经授权的身份验证

Python Pandas - 向量化自定义函数而不是应用

python - 从多个 Excel 文件创建 Pandas 数据框

python - 如何在不使用估计器的情况下为训练的 Tensorflow 模型编写服务输入函数?

python - django 电子邮件中没有这样的文件或目录 attach_file