私は無料でアカウントを作成できるDjango Webアプリケーションを作成しています。私はすでに設定されているデモユーザーを設定し、そのアカウントにデータを添付しています。このデモアカウントの目的は、新しいユーザーにアプリケーションが何をすることができるかを簡単に概観することです。データベースに保存できないDjangoデモユーザーを作成する
このデモユーザーはすべてのビューにアクセスできますが、ユーザーがフォームを保存するとデータベースには保存しないでください。
もちろん、私が知っているオフラインには複数の方法があります。
- そうならば、それは、デモ・ユーザーである場合、フォームのチェックを節約:
- が私のテンプレートから保存ボタンを削除する保存しないデモしかし、彼らはすべて、複数のページまたはビューを編集するために私を必要としますユーザーはログインしています
これを行うには、より簡単でクリーンなソリューションがありますか?特定のユーザーが決してデータベースに保存できないようにアプリケーションをセットアップするにはどうすればよいですか?私は
marcusshepのアイデアを使用
ソリューションは、私のためのソリューションを提供します。フォームをロードする必要があるが、保存ボタンを押したときに保存されないページのビューを作成しました。今まで私はそれをすることができませんでした。この時点では、以下のページでは、303すぐに
class FormViewOPRadio(FormView):
def dispatch(self, request, *args, **kwargs):
# Return 403 for demo user
temp = 'temp'
if self.request.user.email == '[email protected]':
raise PermissionDenied
else:
return super(FormViewOPRadio, self).dispatch(request, *args, **kwargs)
class UpdateViewOPRadio(UpdateView):
def dispatch(self, request, *args, **kwargs):
# Return 403 for demo user
temp = 'temp'
if self.request.user.email == '[email protected]':
raise PermissionDenied
else:
return super(UpdateViewOPRadio, self).dispatch(request, *args, **kwargs)
class DeleteViewOPRadio(DeleteView):
def dispatch(self, request, *args, **kwargs):
# Return 403 for demo user
temp = 'temp'
if self.request.user.email == '[email protected]':
raise PermissionDenied
else:
return super(DeleteViewOPRadio, self).dispatch(request, *args, **kwargs)
は、さらに私は、私が作成した
を試してみました何
from braces.views import UserPassesTestMixin
class UserNotDemoUser(UserPassesTestMixin):
raise_exception = True
def test_func(self, user):
return user.email != '[email protected]'
を使用しているためアクセス不能にする必要がありますいくつかのページもあるレンダリングされますフォームをロードする必要がある保存ボタンを押すと保存されないページの次のビュー
class FormViewOPRadio(FormView):
def form_valid(self, form):
# Return 403 for demo user
if self.request.user.email == '[email protected]':
raise PermissionDenied
else:
return super(FormViewOPRadio, self).form_valid(form)
class AddStream(LoginRequiredMixin, UserPassesTestMixin, SuccessMessageMixin, FormViewOPRadio):
"""Is the page used to add a Stream"""
template_name = 'opradioapp/addoreditstream.html'
form_class = AddStreamForm
success_url = reverse_lazy('opradioapp_home')
success_message = "De stream is opgeslagen"
# Validate if the user is the maintainer of the station
def test_func(self):
user = self.request.user
mainuserstation = MainUserStation.objects.get(slugname=self.kwargs['mainuserstationslug'])
if mainuserstation.maintainer == user:
return True
else:
return False
def form_valid(self, form):
user = self.request.user
mainuserstation = MainUserStation.objects.get(slugname=self.kwargs['mainuserstationslug'])
userstream = UserStream()
userstream.mainuserstation = mainuserstation
userstream.name = form.cleaned_data['name']
userstream.slugname = 'temp'
userstream.description = form.cleaned_data['description']
userstream.save()
member = Member.objects.get(user=user, mainuserstation=mainuserstation)
member.streamavailable.add(userstream)
member.save()
return super(AddStream, self).form_valid(form)
それをやったとき、このよう
if self.request.user.email == '[email protected]':
raise PermissionDenied
を保存()呼び出しの後に呼び出されます。これをどうやって変更できますか?私はスーパーを早く呼び出すことを試みたが、問題に遭遇した。
CBビューを使用しているので、私は最初の解決方法を使用しました。元の質問に私のソリューションを加えました。 – Wenze
それは素晴らしいです! – marcusshep
これは実際に私が期待した通りに動作していないことに遭遇しました。 PermissionDeniedはレンダリングされましたが、フォームは既に保存されていました。したがって関数は間違った順序で呼び出されます。どのように私はこれを解決することができますか? – Wenze