Я пытаюсь создать мультивендорную электронную коммерцию, используя django rest-framework. Я застрял в том, как аутентифицировать мультипользователей, как у меня есть клиенты и продавцы. Я успешно создал API для продавцов, но я не могу назначать роли пользователям. (В основном мы создаем мобильное приложение и сеть)
мои модели:
from django.db import models
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
class SellerProfile(models.Model):
user = models.OneToOneField(
User, blank=True, null=True, on_delete=models.SET_DEFAULT, default=None)
mobileNo = models.CharField(max_length=40, default=None)
cnic = models.CharField(max_length=30, default=None)
city = models.CharField(max_length=30, default=None)
address = models.CharField(max_length=30, default=None)
state = models.CharField(max_length=30, default=None)
shop_name = models.CharField(max_length=30, default=None)
def __str__(self):
return self.user.username
class ClientProfile(models.Model):
user = models.OneToOneField(User, models.SET_DEFAULT, default=None)
def __str__(self):
return self.user.username
и мои сериализаторы:
from profiles.models import SellerProfile, ClientProfile
from rest_framework import serializers, status
# from models import *
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(
write_only=True,
required=True,
help_text='password',
style={'input_type': 'password', 'placeholder': 'Password'}
)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password')
def create(self, validated_data):
user = super().create(validated_data)
user.set_password(validated_data['password'])
user.save()
return user
# def __str__(self):
# return self.user
class ClientSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = ClientProfile
fields = ['user']
def create(self, validated_data):
user_data = validated_data.pop('user')
user = UserSerializer.create(
UserSerializer(), validated_data=user_data)
buyer, created = ClientProfile.objects.update_or_create(
user=user,
# mobileNo=validated_data.pop('mobileNo'),
# location=validated_data.pop('location'),
# address=validated_data.pop('address'),
)
return buyer
class SellerSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = SellerProfile
fields = ('user', 'mobileNo', 'cnic',
'city', 'address', 'state', 'shop_name')
def create(self, validated_data):
user_data = validated_data.pop('user')
user = UserSerializer.create(
UserSerializer(), validated_data=user_data)
seller, created = SellerProfile.objects.update_or_create(user=user,
mobileNo=validated_data.pop(
'mobileNo'),
cnic=validated_data.pop(
'cnic'),
city=validated_data.pop(
'city'),
address=validated_data.pop(
'address'),
shop_name=validated_data.pop(
'shop_name'),
)
return seller
вот мой набор представлений:
from .serializers import *
from profiles.models import *
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import status
class SellerViewSet(viewsets.ModelViewSet):
serializer_class = SellerSerializer
queryset = SellerProfile.objects.all()
def get(self, format=None):
seller = SellerProfile.objects.all()
serializer = SellerSerializer(seller, many=True)
return Response(serializer.data)
def post(self, request):
serializer = SellerSerializer(data=request.data)
if serializer.is_valid(raise_exception=ValueError):
serializer.create(validated_data=request.data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.error_messages,
status=status.HTTP_400_BAD_REQUEST)
class BuyerViewSet(viewsets.ModelViewSet):
serializer_class = ClientSerializer
queryset = ClientProfile.objects.all()
def get(self, format=None):
seller = ClientProfile.objects.all()
serializer = UserSerializer(seller, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ClientSerializer(data=request.data)
if serializer.is_valid(raise_exception=ValueError):
serializer.create(validated_data=request.data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.error_messages,
status=status.HTTP_400_BAD_REQUEST)
вот представления для веб-регистрации:
def registration(request):
if request.method == 'POST':
form = UserForm(request.POST)
sellerFrom = SellerFrom(request.POST)
if form.is_valid() and sellerFrom.is_valid():
user = form.save()
seller = sellerFrom.save()
seller.user = user
seller.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
# user = authentication(username=username, password=password)
# login(request, user)
messages.success(request, 'account was created for' + username)
form = UserForm()
sellerFrom = SellerFrom()
return redirect('login')
else:
form = UserForm()
sellerFrom = SellerFrom()
context = {'form': form, 'sellerForm': sellerFrom}
return render(request, 'gui/signup.html', context)
вот представление для входа в систему:
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
# if user.role == "seller_profile":
auth_login(request, user)
return redirect('home')
else:
messages.info(request, 'Username or password is incorrect')
context = {}
return render(request, 'gui/login.html', context)
Теперь, что делает вышеуказанное кодирование. на самом деле это обрабатывает регистрацию пользователей и логин, но я хочу дать им роль, как продавец = продавец_рол и клиент = клиент_рол а также хотите знать, как аутентифицировать пользователя при входе в систему, будь то продавец или клиент. я ищу ответ большое спасибо и извините за мой плохой английский sh