Skip to content

Commit e2f2ef0

Browse files
Arush KathalArush Kathal
authored andcommitted
setupworkshop2
1 parent 0944969 commit e2f2ef0

16 files changed

Lines changed: 190 additions & 16 deletions

File tree

client/package-lock.json

Lines changed: 0 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies = [
1212
"gunicorn~=23.0",
1313
"python-dotenv~=1.0",
1414
"psycopg[binary,pool]~=3.2.13",
15+
"djangorestframework-simplejwt>=5.5.1",
1516
]
1617

1718
[dependency-groups]

server/server/settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"rest_framework",
4949
"corsheaders",
5050
"healthcheck",
51+
"user_profile"
5152
]
5253

5354
MIDDLEWARE = [
@@ -70,6 +71,13 @@
7071

7172
ROOT_URLCONF = "server.urls"
7273

74+
REST_FRAMEWORK= {
75+
"DEFAULT_AUTHENTICATION_CLASSES": (
76+
"rest_framework.authentication.SessionAuthentication",
77+
"rest_framework_simplejwt.authentication.JWTAuthentication",
78+
),
79+
}
80+
7381
TEMPLATES = [
7482
{
7583
"BACKEND": "django.template.backends.django.DjangoTemplates",

server/server/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@
1717

1818
from django.contrib import admin
1919
from django.urls import include, path
20+
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
2021

2122
urlpatterns = [
2223
path("admin/", admin.site.urls),
24+
path("api-auth/", include("rest_framework.urls")),
25+
path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
26+
path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
2327
path("api/healthcheck/", include("healthcheck.urls")),
28+
path("api/user/", include("user_profile.urls"))
2429
]

server/user_profile/__init__.py

Whitespace-only changes.

server/user_profile/admin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.contrib import admin
2+
from .models import Profile
3+
4+
5+
# Register your models here.
6+
7+
admin.site.register(Profile)

server/user_profile/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class UserProfileConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'user_profile'
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 5.2.8 on 2025-11-29 06:33
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
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.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21+
('bio', models.TextField()),
22+
('age', models.PositiveIntegerField(null=True)),
23+
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
24+
],
25+
),
26+
]

server/user_profile/migrations/__init__.py

Whitespace-only changes.

server/user_profile/models.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from django.db import models
2+
from django.contrib.auth import get_user_model
3+
from django.db.models.signals import post_save
4+
from django.dispatch import receiver
5+
6+
7+
8+
# Create your models here.
9+
10+
11+
User = get_user_model()
12+
13+
class Profile(models.Model):
14+
user = models.OneToOneField(User, on_delete=models.CASCADE)
15+
bio = models.TextField(blank=True)
16+
age = models.PositiveIntegerField(null=True, blank=True)
17+
18+
def __str__(self):
19+
return f"Profile: {self.user.username}"
20+
21+
22+
@receiver(post_save, sender=User)
23+
def create_or_update_user_profile(sender, instance, created, **kwargs):
24+
Profile.objects.get_or_create(user=instance)

0 commit comments

Comments
 (0)