· 7 years ago · Oct 11, 2018, 01:58 PM
1class Usuario(models.Model):
2 user = models.OneToOneField(User, on_delete = models.CASCADE)
3 es_tecnico = models.BooleanField(name = 'es_tecnico', default = False)
4
5class Registrar(mixins.CreateModelMixin, viewsets.GenericViewSet):
6 serializer_class = UsuarioSerializer
7
8 def create(self, request, *args, **kwargs):
9 # Creando un nuevo usuario
10 username = request.POST.get('user.username')
11 password = request.POST.get('user.password')
12 # es_tecnico = request.POST.get('es_tecnico')
13 es_tecnico = False
14 print(username)
15
16 user = User.objects.create_user(username, password)
17 user.save()
18
19 token = Token.objects.create(user=user)
20
21 usuario = Usuario.objects.create(user = user, es_tecnico = es_tecnico)
22 usuario.save()
23
24 return Response({'detail': 'El usuario fue creado con el token: ' + token.key})
25
26
27class LoginView(mixins.CreateModelMixin, viewsets.GenericViewSet):
28 serializer_class = LoginSerializer
29
30 def create(self, request):
31 serializer = LoginSerializer(data=request.data)
32 serializer.is_valid(raise_exception=True)
33 user = serializer.validated_data["user"]
34 django_login(request, user)
35 token, created = Token.objects.get_or_create(user=user)
36 return Response({"token": token.key}, status=200)
37
38class UserSerializer(serializers.ModelSerializer):
39 class Meta:
40 model = User
41 fields = ('username',
42 'password')
43
44class UsuarioSerializer(serializers.ModelSerializer):
45 user = UserSerializer(required=True)
46 class Meta:
47 model = Usuario
48 fields = ('user',
49 'id',
50 'es_tecnico')
51
52class LoginSerializer(serializers.Serializer):
53 username = serializers.CharField()
54 password = serializers.CharField()
55 def validate(self, data):
56 username = data.get("username", "")
57 password = data.get("password", "")
58 if username and password:
59 user = authenticate(username=username, password=password)
60 if user:
61 if user.is_active:
62 data["user"] = user
63 else:
64 msg = "Usuario desactivado"
65 raise exceptions.ValidationError(msg)
66 else:
67 msg = "Imposible loguear con los parametros dados"
68 raise exceptions.ValidationError(msg)
69 else:
70 msg = "Se necesita el username y password"
71 raise exceptions.ValidationError(msg)
72 return data
73
74if user:
75 if user.is_active:
76 data["user"] = user
77 else:
78 msg = "Usuario desactivado"
79 raise exceptions.ValidationError(msg)
80 else:
81 msg = "Imposible loguear con los parametros dados"
82 raise exceptions.ValidationError(msg)
83
84import os
85
86# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
87BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
88
89
90# Quick-start development settings - unsuitable for production
91# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
92
93# SECURITY WARNING: keep the secret key used in production secret!
94SECRET_KEY = (esto no lo muestro pero está)
95
96# SECURITY WARNING: don't run with debug turned on in production!
97DEBUG = True
98
99ALLOWED_HOSTS = []
100
101
102# Application definition
103
104INSTALLED_APPS = [
105 'django.contrib.admin',
106 'django.contrib.auth',
107 'django.contrib.contenttypes',
108 'django.contrib.sessions',
109 'django.contrib.messages',
110 'django.contrib.staticfiles',
111 'corsheaders',
112 'rest_framework',
113 'pedidos',
114 'django_filters',
115 'rest_framework.authtoken'
116]
117
118MIDDLEWARE = [
119 'django.middleware.security.SecurityMiddleware',
120 'django.contrib.sessions.middleware.SessionMiddleware',
121 'corsheaders.middleware.CorsMiddleware',
122 'django.middleware.common.CommonMiddleware',
123 'django.middleware.csrf.CsrfViewMiddleware',
124 'django.contrib.auth.middleware.AuthenticationMiddleware',
125 'django.contrib.messages.middleware.MessageMiddleware',
126 'django.middleware.clickjacking.XFrameOptionsMiddleware',
127]
128
129ROOT_URLCONF = 'misitio.urls'
130
131TEMPLATES = [
132 {
133 'BACKEND': 'django.template.backends.django.DjangoTemplates',
134 'DIRS': [],
135 'APP_DIRS': True,
136 'OPTIONS': {
137 'context_processors': [
138 'django.template.context_processors.debug',
139 'django.template.context_processors.request',
140 'django.contrib.auth.context_processors.auth',
141 'django.contrib.messages.context_processors.messages',
142 ],
143 },
144 },
145]
146
147WSGI_APPLICATION = 'misitio.wsgi.application'
148
149
150# Database
151# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
152
153DATABASES = {
154 'default': {
155 'ENGINE': 'django.db.backends.sqlite3',
156 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
157 }
158}
159
160
161# Password validation
162# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
163
164AUTH_PASSWORD_VALIDATORS = [
165 {
166 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
167 },
168 {
169 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
170 },
171 {
172 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
173 },
174 {
175 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
176 },
177]
178
179
180# Internationalization
181# https://docs.djangoproject.com/en/2.0/topics/i18n/
182
183LANGUAGE_CODE = 'en-us'
184
185TIME_ZONE = 'UTC'
186
187USE_I18N = True
188
189USE_L10N = True
190
191USE_TZ = True
192
193
194# Static files (CSS, JavaScript, Images)
195# https://docs.djangoproject.com/en/2.0/howto/static-files/
196
197STATIC_URL = '/static/'
198
199
200CORS_ORIGIN_ALLOW_ALL = True
201
202# REST_FRAMEWORK = {
203# 'DEFAULT_PERMISSION_CLASSES' : ('rest_framework.permissions.IsAuthenticatedOrReadOnly',)
204# }
205REST_FRAMEWORK = {
206 'DEFAULT_FILTER_BACKENDS': (
207 'django_filters.rest_framework.DjangoFilterBackend',),
208
209 'DEFAULT_AUTHENTICATION_CLASSES': (
210 'rest_framework.authentication.BasicAuthentication',
211 'rest_framework.authentication.SessionAuthentication',
212 'rest_framework.authentication.TokenAuthentication',
213 )
214}
215
216INSTALLED_APPS = [
217 'django.contrib.admin',
218 'django.contrib.auth',
219 'django.contrib.contenttypes',
220 'django.contrib.sessions',
221 'django.contrib.messages',
222 'django.contrib.staticfiles',
223 'rest_framework',
224 'rest_framework.authtoken',
225 'django_filters',
226 'rest_auth',
227 'corsheaders',
228 'pedidos',
229]
230
231urlpatterns = [
232 path('', include(router.urls)),
233 path('rest-auth/', include('rest_auth.urls')),
234]