Один блог для каждого пользователя Django с ролью блога

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

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

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


person espenhogbakk    schedule 17.12.2008    source источник


Ответы (2)


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

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 своей собственной реализацией пользователя, но вам также придется написать для него модель, аутентификацию и промежуточное программное обеспечение...

person rombarcz    schedule 18.12.2008

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

Посмотрите...

person espenhogbakk    schedule 18.12.2008
comment
ну, вы спросили, как создавать представления, а не как изменить поведение административных представлений по умолчанию - person rombarcz; 20.12.2008