Situation
acc
HttpResponse
que le message d'erreur contientdecorators.py
DoesNotExist at /register/ Group matching query does not exist.
ERREUR
Si je me connecte alors que settings.py utilise PostgreSQL . Si je me déconnecte, tout fonctionne à nouveau correctement. Si j'utilise SQL Lite, je peux me connecter et tout fonctionne parfaitement
ValueError at / The view accounts.decorators.wrapper_function didn't return an HttpResponse object. It returned None instead. Request Method: GET Request URL: http://localhost... Django Version: 3.0 Exception Type: ValueError Exception Value: The view accounts.decorators.wrapper_function didn't return an HttpResponse object. It returned None instead. Exception Location: /Users/.../python3.7/site-packages/django/core/handlers/base.py in _get_response, line 126 Python Executable: /Users/.../bin/python3 Python Version: 3.7.3 ..... Request information USER MYUSERNAME GET No GET data POST No POST data FILES No FILES data COOKIES ... ...
J'ai essayé de résoudre
python manage.py migrate
il est dit Running migrations: No migrations to apply.
python manage.py loaddata db.json
from django.http import HttpResponse from django.shortcuts import redirect def unauthenticated_user(view_func): def wrapper_func(request, *args, **kwargs): if request.user.is_authenticated: return redirect('home') else: return view_func(request, *args, **kwargs) return wrapper_func def allowed_users(allowed_roles=[]): def decorator(view_func): def wrapper_func(request, *args, **kwargs): group = None if request.user.groups.exists(): group = request.user.groups.all()[0].name if group in allowed_roles: return view_func(request, *args, **kwargs) else: return HttpResponse('Authorized') return wrapper_func return decorator
4 Réponses :
Tout d'abord, je voudrais vous suggérer d'utiliser l'application d'authentification intégrée django au lieu d'en créer une par votre propre https://docs.djangoproject.com/en/3.0/topics/auth/ , et vous pouvez utiliser l'application django-braces qui a un ensemble incroyable de mixins de vue de classe, pour ce que je vois que vous essayez de faire, ce mixin vous aiderait beaucoup: https://django-braces.readthedocs.io/en/latest/access.html#grouprequiredmixin
Je voudrais juste corriger ce bogue que je ne suis en gros défini. Je ne veux pas supprimer toute l'application d'authentification et le faire avec une toute nouvelle bibliothèque que je n'ai jamais entendue auparavant. Mais je pourrais l'utiliser pour d'autres projets à l'avenir.
Il peut être possible, il n'y a aucun groupe dans votre postgresql. Veuillez donc contourner ces décorateurs et ajouter un groupe à votre base de données postgresql. Ensuite, utilisez ces décorateurs.
Comme je le mentionne dans mon commentaire dans la section Essayé de résoudre "le guide que je suis a créé des groupes d'utilisateurs, que j'ai également fait dans ma base de données PostgreSQL migrée"
Je ne suis pas sûr de pouvoir vous aider, mais j'ai un Mac, j'utilise Django et j'ai eu des problèmes avec PostgreSQL, donc je vais partager mes idées.
Premièrement, il me semble que le problème est bien la connexion avec la base de données, pas le code. J'ai recherché votre erreur dans le code Django, il dit:
python3 manage.py shell -c "from django.db import connection; print(connection.cursor().connection.server_version)"
Bien que je ne sois certainement pas un expert en middleware, apparemment Django ne reçoit pas de données de votre base de données.
Une fois, j'ai eu des problèmes avec différentes versions de PostgreSQL sur mon Mac. Vous pouvez archiver / Library / PostgreSQL, j'ai deux répertoires (11 et 12), donc je dois faire attention à celui que j'utilise pour mes projets. Dans PgAdmin, vous pouvez voir les deux versions. Si vous avez d'anciennes versions ou souhaitez réinstaller PostgreSQL (ce qui est assez drastique mais vous donnerait une feuille vierge), il y a un bon manuel ici: https://medium.com/@zoefhall/effectively-uninstall-and-reinstall- psql-avec-homebrew-sur-osx-fabbc45c5d9d . Vous pouvez vérifier la version que votre Django utilise en tapant dans votre Shell:
def _get_response(self, request): """ Resolve and call the view, then apply view, exception, and template_response middleware. This method is everything that happens inside the request/response middleware. """ ... # Complain if the view returned None (a common error). if response is None: ... raise ValueError( "The view %s.%s didn't return an HttpResponse object. It " "returned None instead." % (callback.__module__, view_name) )
Pour moi, le résultat est 110005, ce qui se traduit par 11.0.5.
J'ai également eu des problèmes avec psycopg2 à plusieurs reprises. Son installation est nécessaire lorsque vous configurez votre environnement virtuel avec Django, donc si vous avez réussi cela, alors cela s'est probablement passé. Le problème que j'ai eu était qu'il ne pouvait pas trouver le fichier de configuration, et la solution la plus simple pour moi était d'installer la version binaire psycopg2-binary. Mais si vous voulez une version spécifique de PostgreSQL sur votre Mac, vous devez mettre le fichier pg_config dans votre PATH, voir https://www.psycopg.org/docs/install.html .
C'est ce que j'ai appris, j'espère que cela vous aidera un peu.
Alors, voici comment je l'ai résolu.
Home › Authentication and Authorization › Groups › customer
... accounts customer can view customer ...
êtes-vous sûr de créer manuellement les groupes à partir de l'administrateur de django et de leur attribuer les utilisateurs.?
Je ne connais pas d'autre moyen, donc je suis sûr.
Ce n'est pas l'inverse. La fonction "allowed_users" est ce à quoi je fais référence. Fondamentalement, il attend des rôles au sein du groupe qui, selon la vidéo, peuvent être du personnel, des administrateurs ou tout autre. Alors, avez-vous créé des rôles à partir de l'administrateur django dans le groupe?
Oui, comme je l'explique dans Essayé de résoudre 1.
@trinchet c'est correct Je ne sais tout simplement pas comment résoudre ce problème, ni où chercher le correctif car le code fonctionne avec SQLite mais pas avec le postgeSQL migré
Quoi qu'il en soit, j'ai essayé d'exécuter votre code à la fois dans postgres et sql, cela fonctionne parfaitement bien pour moi