Skip to content

Commit

Permalink
Add Comments Model, RichTextField,Datetimepicker.js
Browse files Browse the repository at this point in the history
  • Loading branch information
zeliangyao committed Aug 26, 2021
1 parent 253e900 commit fd22220
Show file tree
Hide file tree
Showing 1,404 changed files with 54,181 additions and 16,320 deletions.
16 changes: 16 additions & 0 deletions Api/permissions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from rest_framework import permissions


class IsOwnerOrReadOnly(permissions.BasePermission):
"""
Custom permission to only allow owners of an object to edit it.
"""

def has_object_permission(self, request, view, obj):
# Read permissions are allowed to any request,
# so we'll always allow GET, HEAD or OPTIONS requests.
if request.method in permissions.SAFE_METHODS:
return True

# Write permissions are only allowed to the owner of the snippet.
return obj.created_by == request.user
10 changes: 7 additions & 3 deletions Api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
from book.models import Member, Category, Publisher, Book
from rest_framework.views import APIView, status
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated, AllowAny, IsAdminUser
from rest_framework.permissions import IsAuthenticated, AllowAny, IsAdminUser,IsAuthenticatedOrReadOnly
from django.core.exceptions import PermissionDenied
from book.groups_permissions import check_user_group
from .permissions import IsOwnerOrReadOnly

@api_view(['GET'])
@permission_classes((permissions.IsAuthenticated,))
Expand Down Expand Up @@ -168,7 +169,7 @@ def PublisherDelete(request, pk):
# Member API

class MemberList(APIView):
permission_classes = [IsAuthenticated]
permission_classes = [IsAuthenticatedOrReadOnly]

def get(self,request,format=None):
members = Member.objects.all()
Expand All @@ -184,7 +185,7 @@ def post(self,request,format =None):

class MemberDetail(APIView):

permission_classes = [IsAuthenticated]
permission_classes = [IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly]

def get_object(self,pk):
try:
Expand All @@ -210,3 +211,6 @@ def delete(self, request, pk, format=None):
member.delete()
return Response(status=status.HTTP_204_NO_CONTENT)



# User Api
4 changes: 0 additions & 4 deletions app/__init__.py

This file was deleted.

8 changes: 0 additions & 8 deletions app/admin.py

This file was deleted.

9 changes: 0 additions & 9 deletions app/config.py

This file was deleted.

4 changes: 0 additions & 4 deletions app/migrations/__init__.py

This file was deleted.

10 changes: 0 additions & 10 deletions app/models.py

This file was deleted.

8 changes: 0 additions & 8 deletions app/tests.py

This file was deleted.

25 changes: 0 additions & 25 deletions app/urls.py

This file was deleted.

43 changes: 0 additions & 43 deletions app/views.py

This file was deleted.

13 changes: 13 additions & 0 deletions book/groups_permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,19 @@ class SuperUserRequiredMixin(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_superuser














# content_type = ContentType.objects.get_for_model(Book)
# content_type = ContentType.objects.get_for_model(BlogPost)
# permission = Permission.objects.create(
Expand Down
20 changes: 20 additions & 0 deletions book/migrations/0025_auto_20210825_1956.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 2.2.10 on 2021-08-25 17:56

import datetime
from django.db import migrations, models
from django.utils.timezone import utc


class Migration(migrations.Migration):

dependencies = [
('book', '0024_auto_20210816_1131'),
]

operations = [
migrations.AlterField(
model_name='borrowrecord',
name='end_day',
field=models.DateTimeField(default=datetime.datetime(2021, 9, 1, 17, 56, 34, 718543, tzinfo=utc)),
),
]
20 changes: 20 additions & 0 deletions book/migrations/0026_auto_20210825_1957.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 2.2.10 on 2021-08-25 17:57

import datetime
from django.db import migrations, models
from django.utils.timezone import utc


class Migration(migrations.Migration):

dependencies = [
('book', '0025_auto_20210825_1956'),
]

operations = [
migrations.AlterField(
model_name='borrowrecord',
name='end_day',
field=models.DateTimeField(default=datetime.datetime(2021, 9, 1, 17, 57, 38, 36825, tzinfo=utc)),
),
]
20 changes: 20 additions & 0 deletions book/migrations/0027_auto_20210825_2026.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 2.2.10 on 2021-08-25 18:26

import datetime
from django.db import migrations, models
from django.utils.timezone import utc


class Migration(migrations.Migration):

dependencies = [
('book', '0026_auto_20210825_1957'),
]

operations = [
migrations.AlterField(
model_name='borrowrecord',
name='end_day',
field=models.DateTimeField(default=datetime.datetime(2021, 9, 1, 18, 26, 3, 755494, tzinfo=utc)),
),
]
20 changes: 14 additions & 6 deletions book/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
from django.forms.models import model_to_dict
from django.core.paginator import Paginator
from django.contrib.contenttypes.models import ContentType
from comment.models import Comment
from comment.forms import CommentForm



Expand Down Expand Up @@ -202,6 +204,7 @@ class BookDetailView(LoginRequiredMixin,DetailView):
context_object_name = 'book'
template_name = 'book/book_detail.html'
login_url = 'login'
comment_form = CommentForm()

# def get_object(self, queryset=None):
# obj = super(BookDetailView, self).get_object(queryset=queryset)
Expand All @@ -210,8 +213,11 @@ class BookDetailView(LoginRequiredMixin,DetailView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
current_book_name = self.get_object().title
comments = Comment.objects.filter(book=self.get_object().id)
related_records = BorrowRecord.objects.filter(book=current_book_name)
context['related_records'] = related_records
context['comments'] = comments
context['comment_form'] = self.comment_form
return context

class BookCreateView(LoginRequiredMixin,CreateView):
Expand Down Expand Up @@ -428,8 +434,8 @@ def get(self,request,*args,**kwargs):
return HttpResponseRedirect(reverse("publisher_list"))


# User Logs
@method_decorator(user_passes_test(lambda u: check_user_group(u,"logs")), name='get')
# User Logs
@method_decorator(user_passes_test(lambda u: u.has_perm("book.view_useractivity")), name='dispatch')
class ActivityListView(LoginRequiredMixin,ListView):

login_url = 'login'
Expand All @@ -443,8 +449,10 @@ class ActivityListView(LoginRequiredMixin,ListView):
all_users = User.objects.values()
user_list = [x['username'] for x in all_users]

# def dispatch(self, *args, **kwargs):
# return super(ActivityListView, self).dispatch(*args, **kwargs)

def get_queryset(self):
# check_user_group(self.request.user,'logs')
data = self.request.GET.copy()
search =self.request.GET.get("search")
filter_user=self.request.GET.get("created_by")
Expand Down Expand Up @@ -481,12 +489,13 @@ def get_context_data(self, *args, **kwargs):
return context


@method_decorator(user_passes_test(lambda u: check_user_group(u,"logs")), name='get')
@method_decorator(user_passes_test(lambda u: u.has_perm("book.delete_useractivity")), name='dispatch')
class ActivityDeleteView(LoginRequiredMixin,View):

login_url = 'login'

def get(self,request,*args,**kwargs):

log_pk=kwargs["pk"]
delete_log=UserActivity.objects.get(pk=log_pk)
messages.error(request, f"Activity Removed")
Expand Down Expand Up @@ -804,14 +813,13 @@ def get(self, request, *args, **kwargs):


# Data center

@method_decorator(user_passes_test(lambda u: check_user_group(u,"download_data")), name='dispatch')
class DataCenterView(LoginRequiredMixin,TemplateView):
template_name = 'book/download_data.html'
login_url = 'login'


def get(self,request,*args, **kwargs):
check_user_group(request.user,"download_data")
data = {m.objects.model._meta.db_table:
{"source":pd.DataFrame(list(m.objects.all().values())) ,
"path":f"{str(settings.BASE_DIR)}/datacenter/{m.__name__}_{TODAY}.csv",
Expand Down
Empty file added comment/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions comment/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
5 changes: 5 additions & 0 deletions comment/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class CommentConfig(AppConfig):
name = 'comment'
7 changes: 7 additions & 0 deletions comment/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django import forms
from .models import Comment

class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['body']
32 changes: 32 additions & 0 deletions comment/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by Django 2.2.10 on 2021-08-25 17:57

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


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('book', '0026_auto_20210825_1957'),
]

operations = [
migrations.CreateModel(
name='Comment',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('body', ckeditor.fields.RichTextField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='book.Book')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ('created_at',),
},
),
]
Loading

0 comments on commit fd22220

Please sign in to comment.