J'ai une base de données .sql avec laquelle j'interagis avec Django. La base de données au début est remplie de données publiques accessibles à partir de n'importe qui. Plusieurs utilisateurs individuels peuvent ajouter des lignes dans une table (données privées). Comment un utilisateur ne peut-il voir que les modifications qu'il a effectuées dans la base de données (données privées)?Plusieurs utilisateurs individuels sur une base de données
Répondre
Je suppose que les utilisateurs doivent se connecter à cette application. Si oui, ajoutez une colonne à chaque table pour le nom d'utilisateur. Ajoutez WHERE username = ?
à chaque requête afin qu'ils ne puissent voir que leurs données.
Pour les demandes de manipulation de données, assurez-vous que le nom d'utilisateur correspond à la valeur de chaque ligne; interdire l'opération si ce n'est pas vrai.
Je suppose que vous utilisez django.contrib.auth
. Vous avez juste besoin de faire quelque chose comme:
from django.contrib.auth.models import User
# ...
class PrivateData(models.Model):
# ... private data fields ...
user = models.ForeignKey(User)
Ensuite, vous pouvez obtenir seulement les champs de cet utilisateur avec:
PrivateData.objects.filter(user=request.user)
EDIT: Donc, si vos utilisateurs ne sont que les adresses IP, et vous ne l'utilisez un mécanisme de connexion, vous n'avez pas vraiment besoin django.contrib.auth
... bien qu'il soit bon d'avoir de toute façon puisque vous pouvez l'utiliser pour authentifier vous-même et d'utiliser l'administrateur intégré pour gérer votre site.
Si vous voulez juste de lier les données aux adresses IP, mise en place d'un modèle IPUser
:
class IPUser(models.Model):
address = models.CharField(max_length=64, unique=True) # Big enough for IPv6
# Add whatever other discrete (not list) data you want to store with this address.
class PrivateData(models.Model):
# ... private data fields ...
user = models.ForeignKey(IPUser)
La fonction d'affichage ressemble à quelque chose comme:
def the_view(request):
remoteAddr = request.META['REMOTE_ADDR']
try:
theUser = IPUser.objects.get(address=remoteAddr)
except IPUser.DoesNotExist:
theUser = IPUser.objects.create(address=remoteAddr)
userModifiedData = PrivateData.objects.filter(user=theUser)
Une chose à noter: quand vous » re tester ceci avec manage.py runserver
, vous devrez spécifier l'adresse IP via la variable d'environnement:
$ REMOTE_ADDR=127.0.0.1 manage.py runserver
Lorsque vous utilisez Django avec un vrai serveur web comme Apache, le serveur va définir la variable pour vous.
Il y a probablement plusieurs façons d'optimiser ceci, mais cela devrait vous aider à démarrer.
- 1. Modification d'enregistrements de base de données par plusieurs utilisateurs
- 2. Conception de base de données pour plusieurs utilisateurs site
- 3. Est-ce une bonne idée d'avoir plusieurs utilisateurs pour une base de données?
- 4. Base de données - Index sur plusieurs colonnes
- 5. Sortie de données avec une base de données Access mais utilisateurs stockés dans une base de données SQL
- 6. Stockage des utilisateurs dans une base de données
- 7. Quel est le meilleur moyen d'ajouter des utilisateurs à plusieurs groupes dans une base de données?
- 8. plusieurs utilisateurs, plusieurs applications, un serveur
- 9. Base de données plusieurs-à-plusieurs relations
- 10. Base de données relation plusieurs à plusieurs
- 11. Structure de la base de données des utilisateurs qui permet plusieurs connexions simultanées au même compte
- 12. Partitionnement des utilisateurs - plusieurs OpenID
- 13. Je laisse les utilisateurs écrire des mises en page personnalisées sur une base de données
- 14. Schéma de base de données pour la messagerie à plusieurs utilisateurs
- 15. Utilisateurs dans le serveur de base de données ou les tables de base de données
- 16. Comment configurer phpMyAdmin pour plusieurs utilisateurs - chacun ayant uniquement accès à leur base de données
- 17. comment accéder à la base de données de plusieurs utilisateurs via JDBC
- 18. MS Access DB sur le réseau avec plusieurs utilisateurs
- 19. Comptage de plusieurs entrées dans une base de données MySQL?
- 20. Plusieurs sites basés sur une base commune
- 21. Diffusion de plusieurs tweets - provenant de plusieurs utilisateurs? - Twitter API
- 22. Comment affecter des rôles d'appartenance .net à des enregistrements de base de données individuels
- 23. Accès à la base de données Android sur plusieurs onglets
- 24. Générer plusieurs fichiers XML basés sur la base de données
- 25. Plusieurs messages sur la base de données avec Linq
- 26. Comment enregistrer plusieurs enregistrements individuels pour un seul modèle
- 27. php utilisateurs de base de données mysql gestion des connexions
- 28. Relation de plusieurs à plusieurs de données de base NSPredicate
- 29. dans quelle base de données logiciel/langue pouvons-nous avoir une base de données accessible par plusieurs utilisateurs sauf ses deux colonnes accessibles uniquement par administrateur
- 30. Combinaison de plusieurs bases de données sql dans une base de données
Je n'ai pas beaucoup lu sur contrib.auth mais si je suppose que vous devez définir différents noms d'utilisateur afin de les distinguer, mais les seules choses qui peuvent distinguer mes utilisateurs est leur ip – thikonom