Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file removed tutorial/quickstart/__pycache__/__init__.cpython-36.pyc
Binary file not shown.
Binary file not shown.
Binary file removed tutorial/quickstart/__pycache__/views.cpython-36.pyc
Binary file not shown.
3 changes: 0 additions & 3 deletions tutorial/quickstart/admin.py

This file was deleted.

6 changes: 0 additions & 6 deletions tutorial/quickstart/apps.py

This file was deleted.

3 changes: 0 additions & 3 deletions tutorial/quickstart/models.py

This file was deleted.

14 changes: 0 additions & 14 deletions tutorial/quickstart/serializers.py

This file was deleted.

3 changes: 0 additions & 3 deletions tutorial/quickstart/tests.py

This file was deleted.

20 changes: 0 additions & 20 deletions tutorial/quickstart/views.py

This file was deleted.

20 changes: 5 additions & 15 deletions tutorial/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
Expand All @@ -37,7 +36,7 @@
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
# "rest_framework",
"userpost.apps.UserpostConfig",
]

Expand Down Expand Up @@ -74,25 +73,12 @@

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

# DATABASES = {
# "default": {
# "ENGINE": "django.db.backends.sqlite3",
# "NAME": BASE_DIR / "db.sqlite3",
# }
# }

DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"OPTIONS": {
"read_default_file": "/home/huongnt/SUN/django_tutorial/dj_db_config/mysql/my.cnf",
},
# "NAME": "user_post",
# "USER": "djangouser",
# "PASSWORD": "password",
# "HOST": "127.0.0.1",
# "PORT": "3306",
}
}

Expand Down Expand Up @@ -149,3 +135,7 @@
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
"PAGE_SIZE": 10,
}


AUTH_USER_MODEL = "userpost.CustomUser"
AUTHENTICATION_BACKENDS = ("django.contrib.auth.backends.ModelBackend",)
15 changes: 8 additions & 7 deletions tutorial/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
from django.conf import settings
from django.conf.urls.static import static
from rest_framework import routers
from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r"users", views.UserViewSet)
router.register(r"groups", views.GroupViewSet)
# from tutorial.quickstart import views

# router = routers.DefaultRouter()
# router.register(r"users", views.UserViewSet)
# router.register(r"groups", views.GroupViewSet)

urlpatterns = [
# path("admin/", admin.site.urls),
path("", include(router.urls)),
path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
path("admin/", admin.site.urls),
# path("", include(router.urls)),
# path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
path("api/", include("userpost.urls")),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
45 changes: 45 additions & 0 deletions userpost/migrations/0003_customuser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Generated by Django 3.2.4 on 2021-10-29 17:09

import datetime
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('userpost', '0002_rename_user_id_post_user'),
]

operations = [
migrations.CreateModel(
name='CustomUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('phone', models.CharField(max_length=254)),
('address', models.CharField(max_length=254, null=True)),
('create_at', models.DateField(blank=True, default=datetime.date.today, null=True)),
('update_at', models.DateField(blank=True, null=True)),
('email', models.EmailField(max_length=254, unique=True)),
('is_admin', models.BooleanField(default=False)),
('is_superuser', models.BooleanField(default=False)),
('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')),
('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')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
),
]
20 changes: 20 additions & 0 deletions userpost/migrations/0004_alter_post_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 3.2.4 on 2021-10-29 17:13

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('userpost', '0003_customuser'),
]

operations = [
migrations.AlterField(
model_name='post',
name='user',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='posts', to=settings.AUTH_USER_MODEL),
),
]
107 changes: 105 additions & 2 deletions userpost/models.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,116 @@
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractUser, BaseUserManager

import datetime

# Create your models here.


# class UserManager(BaseUserManager):
# def create_user(self, email, password=None):
# """
# Creates and saves a User with the given email and password.
# """
# if not email:
# raise ValueError("Users must have an email address")

# user = self.model(
# email=self.normalize_email(email),
# )

# user.set_password(password)
# user.save(using=self._db)
# return user

# def create_staffuser(self, email, password):
# """
# Creates and saves a staff user with the given email and password.
# """
# user = self.create_user(
# email,
# password=password,
# )
# user.is_staff = True
# user.save(using=self._db)
# return user

# def create_superuser(self, email, password):
# """
# Creates and saves a superuser with the given email and password.
# """
# user = self.create_user(
# email,
# password=password,
# )
# user.is_staff = True
# user.is_admin = True
# user.is_superuser = True
# user.save(using=self._db)
# return user


# class User(AbstractUser):
# email = models.EmailField(max_length=255, unique=True)
# phone_number = models.CharField(max_length=12, null=True, blank=True)
# address = models.CharField(max_length=255, null=True, blank=True)
# is_admin = models.BooleanField(default=False)
# is_staff = models.BooleanField(default=False)

# USERNAME_FIELD = "email"
# REQUIRED_FIELDS = [] # Email & Password are required by default.

# objects = UserManager()

# def __str__(self):
# """String for representing the User Model object."""
# return (
# f"{self.last_name} {self.first_name}"
# if self.last_name and self.first_name
# else self.username
# )


class MyAccountManager(BaseUserManager):
def create_user(self, email, username, password=None):
if not email:
raise ValueError("User must have an email address")
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user

def create_superuser(self, email, username, password=None):
user = self.create_user(email=self.normalize_email(email), password=password)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user


class CustomUser(AbstractUser):
phone = models.CharField(max_length=254)
address = models.CharField(max_length=254, null=True)
create_at = models.DateField(null=True, blank=True, default=datetime.date.today)
update_at = models.DateField(null=True, blank=True)
email = models.EmailField(unique=True, blank=False)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = MyAccountManager()


class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, related_name="posts", on_delete=models.CASCADE)
user = models.ForeignKey(
"CustomUser", related_name="posts", on_delete=models.SET_NULL, null=True
)

class Meta:
ordering = ["created_at"]
Loading