Django专案架构提示/提示/建议

时间:2018-09-03 18:56:38

标签: python django django-admin

简介

我在djangopython中是新手,为了以正确的方式学习它,我决定开始我的第一个更复杂的项目。简而言之,如果我想的方向正确,我需要一个建议/帮助。

应用说明

整个应用都是关于页面的,用户可以选择page模板,然后自行修改页面的内容。

建筑

我已决定每个template(用户页面的外观)将是独立的django app。我创建了简单的应用mgmt来管理普通内容,也就是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应用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

0 个答案:

没有答案