我在django
和python
中是新手,为了以正确的方式学习它,我决定开始我的第一个更复杂的项目。简而言之,如果我想的方向正确,我需要一个建议/帮助。
整个应用都是关于页面的,用户可以选择page
模板,然后自行修改页面的内容。
我已决定每个template
(用户页面的外观)将是独立的django app
。我创建了简单的应用mgmt
来管理普通内容,也就是User
个人资料扩展等。
mysite.tld/user
我采取的解决方案:
urlpatterns = [
path('admin/', admin.site.urls),
path('jet/', include('jet.urls', 'jet')), # Django JET URLS
path('<username>/',include('mgmt.urls','mgmt')),]
urlpatterns = [
path('<username>/', views.index, name='index'),]
urlpatterns = [
path('', views.route, name='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