django装飾器は登録状態を検出して操作します。


1、ログイン状態を検出する
base.py

def checkLogin(func):
 
  """
    session             
  :param func:
  :return:
  """
  def warpper(request,*args,**kwargs):
    if request.session.get('username', False):
      return func(request, *args, **kwargs)
 
    else:
      return HttpResponse('/login')
  return warpper
index.py:

from proApp import models, article, base
@base.checkLogin
def index(request):
  dict = {
    "article_list": article.getArticle(),
  }
  return render(request, 'index.html',dict)
1エラー:
The view proApp.baset.warpper didn't return an HttpResonse Object.It returned None instead.

解決方法:ユーザーsessionを判断したら、必ずリターン値を返します。
2、登録検査に成功しました。ルートは変更されていません。ページはジャンプしていません。

解決方法:redirect(「ジャンプ経路と名称」)方法、ページジャンプ

from django.shortcuts import render,render_to_response,redirect
def checkLogin(func):
 
  """
    session             
  :param func:
  :return:
  """
  def warpper(request,*args,**kwargs):
    if request.session.get('username', False):
      return func(request, *args, **kwargs)

    else:
      return redirect('/login')
  return warpper
注意:renderとredirectの2点の違い:
1、レンダーはログイン成功後のページを返し、このページを更新するとジャンプ前のページに戻ります。redirectはできません
2、レンダーは登録成功ページを返します。urlルート配布システムを経由しないです。つまり、ジャンプ後urlの試み関数は実行されません。このようにして、戻ってきたページのレンダリングは成功しませんでした。redirectは指定ページにジャンプし、ログインが成功すると、urlルートシステムでマッチングし、存在するマッピング関数があれば、対応するマッピング関数を実行します。
補足知識:Djangoの中間部品とクラスビュー
クラスビュー
関数ビュー:関数で定義されたビューを関数ビューと呼びます。
クラスビュー:クラスで定義されたビューをクラスビューと呼びます。
コードの可読性が良い
クラスビューは関数ビューに対してより高い多重性を持っています。
したがって、ほとんどのビューはクラスを使用して実装されます。

from django.views import View
class ClassView(View):
  """      """

  def get(self, request):
    """get    """
    print('get        ')
    return HttpResponse('get    ')

  def post(self, request):
    """post        """
    print('post    ')
    return HttpResponse('post    ')
  """
  url   
 """
 urlpatterns = [
  url(r"^classview/$", views.ClassView.as_view())
  #ClassView         Django   as_view     view

]
中間部品
中間部品
Djangoのミドルウェアはライト級、最下層のプラグインシステムであり、Djangoの要求と応答処理過程に介入し、Djangoの入力または出力を修正することができる。中間部品の設計は開発者に無侵入型の開発方式を提供し、Djangoフレームのたくましさを強化しました。
中間部品を使用してDjango処理ビューの異なる段階で入力または出力に干渉することができます。

#          (   ).py  
#       
def outer(fuc):
  print('   ')
  def inner(*args, **kwargs):
    print('   ')
    data = fuc(*args, **kwargs)
    print('    ')
    return data
  return inner
#2. settings.py middleware           
'user1.middlewares.outer' #       




以上のdjango装飾器は登録状態を検出して操作します。小編集は皆さんに全部の内容を共有しています。参考にしてもらいたいです。よろしくお願いします。