Skip to content

Commit b665821

Browse files
Apifeet
1 parent 8189a27 commit b665821

File tree

6,740 files changed

+781349
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

6,740 files changed

+781349
-0
lines changed

APIfeed/.env

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
DEBUG = True
2+
ALLOWED_HOSTS = '192.168.1.105'
3+
DATABASE_URL = 'postgresql://postgres:brian@localhost:5432/rest'
4+
EMAIL_HOST = 'server54.web-hosting.com'
5+
EMAIL_USER = '[email protected]'
6+
EMAIL_PASSWORD = 'zJ&gZq0#t1y'
7+
EMAIL_PORT = 26
8+
EMAIL_TLS = False
9+
EMAIL_BACKEND= 'django.core.mail.backends.smtp.EmailBackend'
10+
EMAIL_ALERTS = ''
11+
SECRET_KEY = 'django-insecure-7jy&ce2764i916iw=sb7(s@_c(gj$r&r$_#nadqijo+r1k!tt7'

APIfeed/APIfeed/db.sqlite3

148 KB
Binary file not shown.

APIfeed/APIfeed/manage.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env python
2+
"""Django's command-line utility for administrative tasks."""
3+
import os
4+
import sys
5+
6+
7+
def main():
8+
"""Run administrative tasks."""
9+
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'profiles_project.settings')
10+
try:
11+
from django.core.management import execute_from_command_line
12+
except ImportError as exc:
13+
raise ImportError(
14+
"Couldn't import Django. Are you sure it's installed and "
15+
"available on your PYTHONPATH environment variable? Did you "
16+
"forget to activate a virtual environment?"
17+
) from exc
18+
execute_from_command_line(sys.argv)
19+
20+
21+
if __name__ == '__main__':
22+
main()
23+
24+
25+

APIfeed/APIfeed/perfiles_api/__init__.py

Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

APIfeed/APIfeed/perfiles_api/admin.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.contrib import admin
2+
from django.db.models.base import Model
3+
from perfiles_api import models
4+
5+
admin.site.register(models.UserProfile)
6+
admin.site.register(models.ProfileFeedItem)
7+

APIfeed/APIfeed/perfiles_api/apps.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
class PerfilesApiConfig(AppConfig):
4+
default_auto_field = 'django.db.models.BigAutoField'
5+
name = 'perfiles_api'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Generated by Django 3.2.8 on 2021-10-18 15:50
2+
3+
from django.db import migrations, models
4+
import django.db.models.manager
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
initial = True
10+
11+
dependencies = [
12+
('auth', '0012_alter_user_first_name_max_length'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='UserProfile',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('password', models.CharField(max_length=128, verbose_name='password')),
21+
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
22+
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
23+
('email', models.EmailField(max_length=255, unique=True)),
24+
('name', models.CharField(max_length=255)),
25+
('is_active', models.BooleanField(default=True)),
26+
('is_staff', models.BooleanField(default=False)),
27+
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
28+
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
29+
],
30+
options={
31+
'abstract': False,
32+
},
33+
managers=[
34+
('object', django.db.models.manager.Manager()),
35+
],
36+
),
37+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.8 on 2021-10-18 18:08
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('perfiles_api', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='userprofile',
15+
name='email',
16+
field=models.EmailField(max_length=250, unique=True),
17+
),
18+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.8 on 2021-10-18 18:08
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('perfiles_api', '0002_alter_userprofile_email'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='userprofile',
15+
name='email',
16+
field=models.EmailField(max_length=255, unique=True),
17+
),
18+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.8 on 2021-10-19 15:30
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('perfiles_api', '0003_alter_userprofile_email'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='userprofile',
15+
name='email',
16+
field=models.EmailField(max_length=250, unique=True),
17+
),
18+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Generated by Django 3.2.8 on 2021-10-21 18:06
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('perfiles_api', '0004_alter_userprofile_email'),
12+
]
13+
14+
operations = [
15+
migrations.AlterModelManagers(
16+
name='userprofile',
17+
managers=[
18+
],
19+
),
20+
migrations.AlterField(
21+
model_name='userprofile',
22+
name='email',
23+
field=models.EmailField(max_length=255, unique=True),
24+
),
25+
migrations.CreateModel(
26+
name='ProfileFeedItem',
27+
fields=[
28+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
29+
('status_text', models.CharField(max_length=255)),
30+
('create_on', models.DateTimeField(auto_now_add=True)),
31+
('user_profile', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
32+
],
33+
),
34+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.8 on 2021-10-21 18:15
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('perfiles_api', '0005_auto_20211021_1306'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='profilefeeditem',
15+
name='status_text',
16+
field=models.CharField(max_length=250),
17+
),
18+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.8 on 2021-10-21 18:16
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('perfiles_api', '0006_alter_profilefeeditem_status_text'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='profilefeeditem',
15+
name='status_text',
16+
field=models.CharField(max_length=255),
17+
),
18+
]

APIfeed/APIfeed/perfiles_api/migrations/__init__.py

Whitespace-only changes.
Binary file not shown.
Binary file not shown.
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from django.db import models
2+
from django.contrib.auth.models import AbstractBaseUser, User
3+
from django.contrib.auth.models import PermissionsMixin
4+
from django.contrib.auth.models import BaseUserManager
5+
from django.conf import settings
6+
# Create your models here.
7+
8+
class UserProfileManager(BaseUserManager):
9+
""" Manager para perfiles de usuario """
10+
11+
def create_user(self, email, name, password=None):
12+
"""Crear nuevo user profile"""
13+
14+
if not email:
15+
raise ValueError('Usuario debe tener un email')
16+
17+
email = self.normalize_email(email)
18+
user = self.model(email=email, name=name)
19+
20+
user.set_password(password)
21+
user.save(using=self._db)
22+
23+
return user
24+
25+
def create_superuser(self, email, name, password):
26+
user= self.create_user(email, name, password)
27+
28+
user.is_superuser = True
29+
user.is_staff = True
30+
user.save(using=self._db)
31+
32+
return user
33+
34+
35+
class UserProfile(AbstractBaseUser, PermissionsMixin):
36+
"""Modelo personalisado base de datos para usuarios en el sistemma"""
37+
38+
email = models.EmailField(max_length=255, unique=True)
39+
name = models.CharField(max_length=255)
40+
is_active = models.BooleanField(default=True)
41+
is_staff = models.BooleanField(default=False)
42+
43+
objects = UserProfileManager()
44+
45+
USERNAME_FIELD = 'email'
46+
REQUIRED_FIELDS = ['name']
47+
48+
def get_full_name(self):
49+
"""Obtener nombre completo"""
50+
return self.name
51+
52+
def get_short_name(self):
53+
"""Obtener nombre corto"""
54+
return self.name
55+
56+
"""Obtener cadena de representando nestro usuario"""
57+
def ___str__(self):
58+
return self.email
59+
60+
61+
class ProfileFeedItem(models.Model):
62+
""" Perfil de Status Update """
63+
user_profile = models.ForeignKey(
64+
settings.AUTH_USER_MODEL,
65+
on_delete=models.CASCADE
66+
)
67+
68+
status_text = models.CharField(max_length=255)
69+
create_on = models.DateTimeField(auto_now_add=True)
70+
71+
def __str__(self):
72+
"""" retomas modelos como cadena """
73+
return self.status_text
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""Permiso personalisado"""
2+
from django.contrib.auth.models import Permission
3+
from rest_framework import permissions
4+
5+
class UpdateOwnProfile(permissions.BasePermission):
6+
"""Perimite usuario editar su propio perfil"""
7+
8+
def has_object_permission(self, request, view, obj):
9+
"""Chequear si un usuario esta intentando editar su propio perfil """
10+
if request.method in permissions.SAFE_METHODS:
11+
return True
12+
13+
return obj.id == request.user.id
14+
15+
class UpdateOwnStatus(permissions.BasePermission):
16+
""" Permite actualizar propio status feed """
17+
18+
def has_object_permission(self, request, view, obj):
19+
""" Chequear si un usuario esta intentando editar su propop perfil """
20+
if request.method in permissions.SAFE_METHODS:
21+
return True
22+
23+
return obj.user_profile_id == request.user.id
24+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from django.db.models import fields
2+
from rest_framework import serializers
3+
4+
from perfiles_api import models
5+
6+
7+
class HelloSerializer(serializers.Serializer):
8+
"""Serializa un campo para probar nuestra APIview"""
9+
10+
name = serializers.CharField(max_length=10)
11+
12+
13+
# Perfiles
14+
class UserPerfilSerializer(serializers.ModelSerializer):
15+
"""Serealiza objeto de perfil usuario"""
16+
17+
class Meta:
18+
model = models.UserProfile
19+
fields = ('id', 'email', 'name', 'password')
20+
""" Proteccion de contraseña """
21+
extra_kwargs = {
22+
'password': {
23+
'write_only': True,
24+
'style': {'input_type': 'password'}
25+
}
26+
}
27+
28+
def create(self, validated_data):
29+
"""Crear y retornar nuevo usuario"""
30+
31+
user = models.UserProfile.objects.create_superuser(
32+
email=validated_data['email'],
33+
name=validated_data['name'],
34+
password=validated_data['password']
35+
)
36+
return user
37+
38+
def update(self, instance, validated_data):
39+
"""Actualiza cuenta de usuario"""
40+
41+
if 'password' in validated_data:
42+
password = validated_data.pop('password')
43+
instance.set_password(password)
44+
45+
return super().update(instance, validated_data)
46+
47+
class ProfileFeedItemSerializer(serializers.ModelSerializer):
48+
"""Serealizador de profile feed items """
49+
50+
class Meta:
51+
model = models.ProfileFeedItem
52+
fields = ('id', 'user_profile', 'status_text', 'created_on')
53+
extra_kwags = {'user_profile': {'read_only': True}}

APIfeed/APIfeed/perfiles_api/tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

APIfeed/APIfeed/perfiles_api/urls.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django.urls import path, include
2+
from rest_framework import routers
3+
4+
from rest_framework.routers import DefaultRouter
5+
# VIEWS
6+
from perfiles_api import views
7+
8+
router = DefaultRouter()
9+
router.register('hello_viewset', views.HelloViewSet, basename='hello-viewset')
10+
router.register('profile', views.UserProfileViewSet)
11+
router.register('feed', views.UserProfileFeedViewsSet)
12+
13+
urlpatterns = [
14+
path('hello_view/', views.HelloapiView.as_view()),
15+
path('login/', views.UserLoginApiView.as_view()),
16+
path('', include(router.urls))
17+
]

0 commit comments

Comments
 (0)