Compare commits

...

8 Commits
main ... prod

  1. 13
      chat/api.py
  2. 19
      chat/migrations/0003_alter_message_parent.py
  3. 2
      chat/models.py
  4. 20
      chat/serializers.py
  5. 8
      chat/views.py
  6. 20
      enchant_server/settings.py
  7. 3
      enchant_server/urls.py

@ -0,0 +1,13 @@
from rest_framework import permissions
from rest_framework.generics import CreateAPIView
#from django.contrib.auth import get_user_model # If used custom user model
from .serializers import UserSerializer
class CreateUserView(CreateAPIView):
#model = get_user_model()
permission_classes = [
permissions.AllowAny # Or anon users can't register
]
serializer_class = UserSerializer

@ -0,0 +1,19 @@
# Generated by Django 4.1.1 on 2023-12-13 13:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('chat', '0002_message_parent'),
]
operations = [
migrations.AlterField(
model_name='message',
name='parent',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='chat.message'),
),
]

@ -19,7 +19,7 @@ class Message(models.Model):
date = models.DateTimeField("date published")
user = models.ForeignKey(User, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
parent = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
parent = models.ForeignKey('self', blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.text

@ -2,6 +2,21 @@ from django.contrib.auth.models import User
from rest_framework import serializers
from .models import App, Room, Message
class UserSerializer(serializers.HyperlinkedModelSerializer):
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = User.objects.create_user(
username=validated_data['username'],
password=validated_data['password'],
)
return user
class Meta:
model = User
fields = ['id', 'username', 'password']
class AppSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = App
@ -10,9 +25,12 @@ class AppSerializer(serializers.HyperlinkedModelSerializer):
class RoomSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Room
fields = ['id', 'name']
fields = ['id', 'name', 'app']
class MessageSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer()
class Meta:
model = Message
fields = ['id', 'text', 'date', 'user', 'room', 'parent']

@ -6,7 +6,8 @@ from django.shortcuts import get_object_or_404, render
from django.template import loader
from rest_framework import viewsets, generics
from rest_framework import permissions
from .serializers import AppSerializer, RoomSerializer, MessageSerializer
from .serializers import AppSerializer, RoomSerializer, MessageSerializer, UserSerializer
from django.contrib.auth.models import User
# Create your views here.
def index(request):
@ -25,6 +26,11 @@ def room(request, room_id):
}
return render(request, "chat/room.html", context)
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class AppViewSet(viewsets.ModelViewSet):
queryset = App.objects.all()
serializer_class = AppSerializer

@ -24,9 +24,9 @@ BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-fw*y$0ozm)bmmm+e6(0d#+j7m(@(etgr@012g5%3@jsn3jtl1u'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
DEBUG = False
ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']
# Application definition
@ -78,8 +78,13 @@ WSGI_APPLICATION = 'enchant_server.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'stax_enchant_chat',
'USER': 'stax',
'PASSWORD': 'staxkikoo',
'HOST': 'postgresql-stax.alwaysdata.net',
}
}
@ -119,6 +124,7 @@ USE_TZ = True
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
@ -130,6 +136,10 @@ REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}

@ -22,7 +22,8 @@ from chat import views
router = routers.DefaultRouter()
router.register(r'apps', views.AppViewSet)
router.register(r'rooms', views.RoomViewSet)
router.register(r'messages', views.MessageViewSet, basename='Message')
router.register(r'users', views.UserViewSet)
router.register(r'messages', views.MessageViewSet, basename='message')
urlpatterns = [
path("chat/", include("chat.urls")),

Loading…
Cancel
Save