Один блог для каждого пользователя Django с «ролью блога» - PullRequest
0 голосов
/ 18 декабря 2008

Какой подход является лучшим способом сделать типы контента доступными для пользователя в Django?

Допустим, я хочу, чтобы у всех пользователей с ролью "blogger" был свой блог.

Я создал приложение для блога. Как я могу ограничить это так, чтобы пользователь, вошедший в систему, мог публиковать сообщения только в своем «собственном» блоге, и как мне создавать просмотры, которые показывают только блог пользователя?

Ответы [ 2 ]

4 голосов
/ 18 декабря 2008

Сначала ваши записи в блоге должны быть прикреплены к пользователю, так что вы знаете, на чьем дисплее блога, верно? models.py:

class BlogEntry(models.Model):
    user = models.ForeignKey(User, related_name='blog_entries')
    other_field_1 = ...
    other_field_2 = ...

Далее, пропустите его в ModelForm, forms.py:

class BlogEntryModelForm(forms.ModelForm):
    class Meta:
        exclude = ('user',)

Затем, когда пользователь хочет опубликовать запись, требуется, чтобы он вошел в систему, views.py:

@login_required
def post_blog_entry(request):
    ....
    if request.method == 'POST':
       form = BlogEntryModelForm(request.POST)
       if form.is_valid():
          new_entry = form.save(commit=False)
          new_entry.user = request.user
          new_entry.save()

Когда вы хотите отобразить некоторый пользовательский блог, views.py:

def view_blog(request, blogger_name):
    user = get_object_or_404(User, username=blogger_name)
    entries = user.blog_entries.all()

Пользователь django.contrib.auth.models.User Вы можете добавить пользовательскую проверку ролей для представлений выше, чтобы отобразить страницу 404 или страницу ошибки, если у пользователя нет прав на создание блога.

При желании вы можете заменить пользователя из django.contrib.auth собственной реализацией пользователя, но вам также придется написать модель, аутентификацию и промежуточное программное обеспечение для него ...

0 голосов
/ 18 декабря 2008

Я не пытался реализовать это, но нашел другую душу, которая работала очень хорошо. Это было легко реализовать и делало все, что я хотел.

Проверьте это ...

...