[Django]退会機能を実装する
Webサービスを開発するときに用意しておかなければならないのが退会機能。それをDjangoで作る機能をご紹介します。
退会
退会機能は他のユーザーからアクセスされては困るので、制限をかけときます。
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin class OnlyYouMixin(UserPassesTestMixin): raise_exception = True def test_func(self): user = self.request.user return user.username == self.kwargs['username'] or user.is_superuser
これをUserDeleteViewに継承させます。これで他人からはアクセスできないようにします。
class UserDeleteView(OnlyYouMixin, generic.DeleteView): template_name = "registration/delete.html" success_url = reverse_lazy("user_auth:login") model = User slug_field = 'username' slug_url_kwarg = 'username'
さてさて、urls.pyも追加しておきましょう。
path('<str:username>/delete/', views.UserDeleteView.as_view(), name='delete'),
そして、退会ページを作っていきましょう。
{% extends 'base.html' %} {% block body %} <section class="hero"> <div class="hero-body"> <div class="container"> <h1 class="title"> 退会 </h1> </div> </div> </section> <form role="form" method="post"> {% csrf_token %} <p>あなたのアカウント「@{{ user.username }}」を、本当に削除してもよろしいですか?</p> <button type="submit" class="button is-danger">削除</button> <a href="javascript:void(0);" onclick="window.history.back();" class="button is-text">キャンセル</a> </form> {% endblock %}
href="javascript:void(0);" onclick="window.history.back();"
これは一つ前のページに戻るJavaScriptのコードです。CSSはBulmaを使っています。便宜読み替えてください。
問題は、退会ページにアクセスする際のことです。ログインしてない状態で退会ページにアクセスすることはできません(テンプレートの方でエラーが出る)。
なので、if文を使います。
{% if user.is_authenticated %} <li><a href="{% url 'user_auth:delete' user.username %}">退会</a></li> {% endif %}
これで、ログインしている時のみアクセスできるようになりました!
何かありましたら、じぇい👨💻 (@jyouj__) | Twitterに!
【店内全品5倍】Python Django超入門/掌田津耶乃【3000円以上送料無料】
- ジャンル: 本・雑誌・コミック > PC・システム開発 > プログラミング > その他
- ショップ: bookfan 1号店 楽天市場店
- 価格: 3,240円