Skip to content

Commit dcbea4d

Browse files
committed
Created the profile app, models, urls, and serializers
1 parent 0ba220e commit dcbea4d

File tree

10 files changed

+147
-0
lines changed

10 files changed

+147
-0
lines changed

api/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
'django.contrib.messages',
3838
'django.contrib.staticfiles',
3939
'accounts.apps.AccountsConfig',
40+
'profile.apps.ProfileConfig',
41+
'rest_framework',
4042
]
4143

4244
MIDDLEWARE = [
@@ -118,6 +120,8 @@
118120
),
119121
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
120122
'TEST_REQUEST_DEFAULT_FORMAT': 'json',
123+
'DEFAULT_PAGINATION_CLASS':
124+
'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
121125
}
122126

123127
JSON_API_FORMAT_KEYS = 'underscore'

api/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
urlpatterns = [
77
url(admin_root_url, admin.site.urls),
88
url(r'^services/api/', include('accounts.urls')),
9+
url(r'^services/api/', include('profile.urls')),
910
]

profile/__init__.py

Whitespace-only changes.

profile/apps.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from django.apps import AppConfig
2+
3+
class ProfileConfig(AppConfig):
4+
name = 'profile'

profile/migrations/0001_initial.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Generated by Django 2.1.2 on 2018-10-06 17: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+
initial = True
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='Profile',
19+
fields=[
20+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21+
('created_at', models.DateTimeField(auto_now_add=True)),
22+
('updated_at', models.DateTimeField(auto_now=True)),
23+
('tagline', models.CharField(blank=True, max_length=255)),
24+
('bio', models.TextField(blank=True)),
25+
('___location', models.CharField(blank=True, max_length=255)),
26+
('linkedin_url', models.CharField(blank=True, max_length=255)),
27+
('twitter_url', models.CharField(blank=True, max_length=255)),
28+
('github_url', models.CharField(blank=True, max_length=255)),
29+
('company', models.CharField(blank=True, max_length=255)),
30+
('blog', models.CharField(blank=True, max_length=255)),
31+
('public_repos', models.CharField(blank=True, max_length=255)),
32+
('hireable', models.BooleanField(default=False)),
33+
('user', models.OneToOneField(on_delete=django.db.models.deletion.DO_NOTHING, related_name='profile', to=settings.AUTH_USER_MODEL, verbose_name='user')),
34+
],
35+
options={
36+
'verbose_name': 'Profile',
37+
'verbose_name_plural': 'Profiles',
38+
'ordering': ('user',),
39+
},
40+
),
41+
migrations.CreateModel(
42+
name='ProfileURL',
43+
fields=[
44+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
45+
('created_at', models.DateTimeField(auto_now_add=True)),
46+
('updated_at', models.DateTimeField(auto_now=True)),
47+
('name', models.CharField(max_length=250)),
48+
('description', models.TextField(blank=True)),
49+
('description', models.TextField(blank=True)),
50+
('url', models.TextField(null=True)),
51+
('profile', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='profile.Profile')),
52+
],
53+
),
54+
]

profile/migrations/__init__.py

Whitespace-only changes.

profile/models.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from django.db import models
2+
from accounts.models import User
3+
from api import settings
4+
5+
class Profile(models.Model):
6+
7+
user = models.OneToOneField(
8+
settings.AUTH_USER_MODEL,
9+
related_name="profile",
10+
verbose_name="user",
11+
on_delete=models.DO_NOTHING
12+
)
13+
created_at = models.DateTimeField(auto_now_add=True)
14+
updated_at = models.DateTimeField(auto_now=True)
15+
tagline = models.CharField(max_length=255, blank=True)
16+
bio = models.TextField(blank=True)
17+
___location = models.CharField(max_length=255, blank=True)
18+
linkedin_url = models.CharField(max_length=255, blank=True)
19+
twitter_url = models.CharField(max_length=255, blank=True)
20+
github_url = models.CharField(max_length=255, blank=True)
21+
company = models.CharField(max_length=255, blank=True)
22+
blog = models.CharField(max_length=255, blank=True)
23+
public_repos = models.CharField(max_length=255, blank=True)
24+
hireable = models.BooleanField(default=False)
25+
26+
class Meta:
27+
verbose_name = "Profile"
28+
verbose_name_plural = "Profiles"
29+
ordering = ("user",)
30+
31+
def __str__(self):
32+
return self.user.username
33+
34+
class ProfileURL(models.Model):
35+
def __str__(self):
36+
return self.name
37+
38+
class Meta:
39+
verbose_name = "Profile URLs"
40+
verbose_name_plural = "Profile URLs"
41+
42+
created_at = models.DateTimeField(auto_now_add=True)
43+
updated_at = models.DateTimeField(auto_now=True)
44+
name = models.CharField(max_length=250,)
45+
description = models.TextField(blank=True)
46+
url = models.TextField(null=True,)
47+
profile = models.ForeignKey(Profile, on_delete=models.DO_NOTHING, related_name='urls')

profile/serializers.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from rest_framework_json_api import serializers
2+
from .models import Profile
3+
from accounts.serializers import UserSerializer
4+
from accounts.models import User
5+
from rest_framework_json_api.relations import ResourceRelatedField
6+
7+
class ProfileSerializer(serializers.ModelSerializer):
8+
class Meta:
9+
model = Profile
10+
fields = ('bio', 'user',)
11+
12+
included_serializers = { 'user': UserSerializer }
13+
14+
user = ResourceRelatedField(
15+
queryset=User.objects # queryset argument is required
16+
) # except when read_only=True
17+
18+
class JSONAPIMeta:
19+
included_resources = ['user',]
20+

profile/urls.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from django.conf.urls import url, include
2+
from . import views
3+
from rest_framework import routers
4+
5+
router = routers.DefaultRouter(trailing_slash=False)
6+
router.register(r'profiles', views.ProfileViewSet, base_name='Profile')
7+
8+
urlpatterns = [
9+
url(r'^', include(router.urls)),
10+
]

profile/views.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from rest_framework import viewsets
2+
from .models import Profile
3+
from .serializers import ProfileSerializer
4+
5+
class ProfileViewSet(viewsets.ModelViewSet):
6+
queryset = Profile.objects.all()
7+
serializer_class = ProfileSerializer

0 commit comments

Comments
 (0)