2008-12-17 13 views
0

Quelle approche est la meilleure façon de restreindre les types de contenu à un utilisateur dans Django? Disons que je veux que tous les utilisateurs avec le rôle utilisateur "blogger" aient leur propre blog.Un blog pour chaque utilisateur Django avec le "rôle de blog"

J'ai créé une application de blog. Comment puis-je le restreindre afin que l'utilisateur connecté ne puisse publier que sur son propre blog, et comment puis-je créer des vues qui ne montrent que le blog d'un utilisateur?

Répondre

4

D'abord vos entrées de blog doivent être attachées à l'utilisateur, donc vous savez sur quel blog afficher, pas vrai? models.py:

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

Ensuite, sauter dans ModelForm, forms.py:

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

Ensuite, lorsque l'utilisateur veut entrée poster vous avez besoin, il est connecté, 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() 

Lorsque vous voulez afficher un certain blog de l'utilisateur, views.py:

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

L'utilisateur est django.contrib.auth.models.User Vous pouvez ajouter un contrôle de rôle personnalisé aux vues ci-dessus pour afficher page 404 ou page d'erreur si l'utilisateur n'a aucun droit de créer un blog.

En option, vous pouvez remplacer l'utilisateur de django.contrib.auth avec votre propre implémentation de l'utilisateur, mais vous devrez écrire le modèle, l'authentification et middleware pour elle aussi ...

-1

Je na pas essayer de mettre en œuvre, mais j'ai trouvé une autre soultion qui marchait très bien. C'était facile à mettre en place et j'ai fait tout ce que je voulais.

Check it out...

+0

bien, vous avez demandé comment faire des vues, pas comment modifier le comportement par défaut admin Vues – rombarcz

+0

Ouais, je vois que le savoir, désolé .. – espenhogbakk