Советы / советы / советы по архитектуре проекта Django - PullRequest
0 голосов
/ 03 сентября 2018

Введение

Я немного новичок в django и python и, чтобы научиться этому должным образом, я решил начать свой первый немного более сложный проект. Короче говоря, мне нужен совет / помощь, если я думаю в правильном направлении.

Описание приложения

Все приложение относится к странице, где пользователи могут выбрать шаблон page и самостоятельно изменить содержание страницы.

Архитектура

Я решил, что каждый template (вид страницы пользователя) будет отдельным django app. Я создал простое приложение mgmt для управления обычными вещами a.k.a User расширение профиля и т. Д.

Требования

  1. Пользователи не могут изменять / просматривать каждый другой элемент одного и того же шаблона
  2. Ссылка на страницу пользователя должна выглядеть как mysite.tld/user

Решение

Решение, которое я принял:

urls.py настройка

проект urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('jet/', include('jet.urls', 'jet')),  # Django JET URLS
path('<username>/',include('mgmt.urls','mgmt')),]

шаблон urls.py

urlpatterns = [
path('<username>/', views.index, name='index'),]

mgmt app urls.py

urlpatterns = [
path('', views.route, name='route'),]

mgmt.route

def route(request, username):
   u = User.objects.get(username=username)
   templRender = __import__(u.profile.template+'.views', fromlist=[u.profile.template])
   return templRender.index(request, username)

Вопрос1: Как лучше обойти это решение?

настройка интерфейса администратора

Я решил проблему с правами с помощью следующих методов

def has_view_permission(self,request, obj=None):
    if obj is not None and obj.created_by != request.user:
        print(obj.created_by)
        return False
    return True

def has_delete_permission(self,request, obj=None):
    if obj is not None and obj.created_by != request.user:
        return False
    return True

def has_change_permission(self,request, obj=None):
    if obj is not None and obj.created_by != request.user:
        return False
    return True

def get_queryset(self, request):
    qs = super().get_queryset(request)
    if request.user.is_superuser:
        return qs
    return qs.filter(created_by=request.user)     

def save_model(self, request, instance, form, change):
    instance = form.save(commit = False)
    if not change or not instance.created_by:
        instance.created_by = request.user
    instance.save()
    form.save_m2m()
    return instance

Вопрос2: Есть ли другой способ решить такое ограничение?

Спасибо за любые советы или подсказки.

Y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...