3-Djangoビュー


概要
役割:ビューはWEB要求を受信してWEB応答に戻る
方法:1.FBV(function base views)は、ビューで関数を使用してリクエストを処理します.
​ 2. CBV(class base views)は、ビューでクラス処理要求を使用する.
応答:HTMLページ、リダイレクト、404エラー、JSONデータなど
プロセス:
URLConf
ビュー関数
HttpRequestオブジェクト
概要:サーバはhttpプロトコルの要求を受信すると、メッセージに基づいてHttpRequestオブジェクトを作成します.ビュー関数のパラメータの1つがHttpRequestオブジェクトです
ツールバーの
方法
is_ajax():リクエストがXMLHTTPRequestクラスによって開始された場合は、Trueを返します.
QueryDictオブジェクトclipboard.png
GET属性
http://127.0.0.1:8000/get1/?a=1&b=2&c=3
def get1(request):
    a = request.GET.get("a")
    b = request.GET.get("b")
    c = request.GET.get("c")
    return HttpResponse(a+"-"+b+"-"+c)

http://127.0.0.1:8000/get2/?a=1&a=2&c=3
def get2(request):
    alist = request.GET.getlist("a")
    c = request.GET.get("c")
    return HttpResponse(alist[0]+"-"+alist[1]+"-"+c)

POST属性
フォームのコミットを使用するにはsettingsが必要です.pyファイルの'django.middleware.csrf.CsrfViewMiddleware,ミドルウェア削除
または{%csrf_token}を付ける



    
      


    
:
:
:
#views.py
def register(request):
    if request.method == "GET":
        return render(request, "register.html")
    else:
        username = request.POST.get("username")
        passwd   = request.POST.get("passwd")
        hobbys   = request.POST.getlist("hobby")
        print(username, passwd, hobbys)
        return HttpResponse("    ")

HttpResponseオブジェクト
概要:HttpRequestオブジェクトはDjangoによって自動的に作成されますが、HttpResponseオブジェクトはプログラマーによって作成されます.ストレージサーバがクライアントに応答するデータ
使用法
一般的なMIMEタイプ(汎用):
  • ハイパーテキストタグ言語テキスト.html text/html
  • xmlドキュメント.xml text/xml
  • XHTMLドキュメント.xhtml application/xhtml+xml
  • 普通テキスト.txt text/plain
  • RTFテキスト.rtf application/rtf
  • PDFドキュメント.pdf application/pdf
  • Microsoft Wordファイルword application/msword
  • PNG画像.png image/png
  • GIFパターン.gif image/gif
  • JPEGパターン.jpeg,.jpg image/jpeg
  • auサウンドファイル.au audio/basic
  • MIDI音楽ファイルmid,.midi audio/midi,audio/x-midi
  • RealAudio音楽ファイル.ra, .ram audio/x-pn-realaudio
  • MPEGファイル.mpg,.mpeg video/mpeg
  • AVIファイル.avi video/x-msvideo
  • GZIPファイル.gz application/x-gzip
  • TARファイル.tar application/x-tar
  • 任意のバイナリデータアプリケーション/octet-stream
  • ツールバーの
    ツールバーの
    説明
    content
    返される内容、文字列のタイプを表します.
    charset
    responseが採用する符号化文字セット、文字列タイプを表す
    status_code
    HTTPに応答するステータスコード
    content_type
    出力のMIMEタイプを指定
    方法
    init:ページを使用してHttpResponseオブジェクトをインスタンス化する
    write(content):
    #         ,  content         ,    HttpResponse           
    def index(request):
        response = HttpResponse()
        response.content = "sunck is a good man"
        response.charset = "utf-8"
        response.write("!")
        response.write("very good!")
        return response

    flush():バッファをファイルで出力する;flushの後でwriteを書かないでください
    set_Cookie():プロトタイプ:set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False)役割:クッキーを設定し、クッキーはクライアントに保存された情報であり、キー値ペアで保存する
    パラメータ:
  • key:cookieのキー
  • value:cookieの値
  • max_age:有効期限単位秒
  • expires:有効期限datetimeを設定.datetimeオブジェクト
  • 例:
    def setcookie(request):
        response = HttpResponse("sunck is a handsome man")
        response.set_cookie("sunck", "good")
        return response
    
    request.COOKIES.get("sunck")

    サブクラスHttpResponseRedirect
    機能:リダイレクト、サーバー側ジャンプ
    インプリメンテーション
    from django.http import HttpResponse, HttpResponseRedirect
    def indexTemp(request):
        #     /index/
        return HttpResponseRedirect("/index/")
    
    from django.shortcuts import render, redirect
    from django.http import HttpResponse, HttpResponseRedirect
    
    def indexTemp(request):
        #     /index/, HttpResponseRedirect    ,   redirect
        # return HttpResponseRedirect("/index/")
        return redirect("/index")

    サブクラスJsonResponse
    JSONデータを返し、一般的に非同期要求に用いられる
    利点:ユーザーがJSON符号化応答を作成するのを助ける;パラメータは辞書オブジェクトであり、リストなどの辞書形式でない場合、パラメータsafe=Falseを設定します.JsonResponseのデフォルトContent-Typeはアプリケーション/jsonで、書く必要はありません.
    じょうたいほじ
    概要
    セッションの有効化
    # settings.py        
    'django.contrib.sessions',
    'django.contrib.sessions.middleware.SessionMiddleware'

    セッションの使用
    セッションを有効にすると、各HttpRequestオブジェクトには、辞書のようなオブジェクトであるセッション属性があります.
    方法
    説明する
    get(key, default=None)
    キーに基づいてセッションの値を取得
    clear()
    すべてのセッションをクリア
    flush()
    現在のセッションを削除し、セッションのクッキーを削除
    del request.セッション[キー]
    セッションの削除
    def home(request):
        userAccount = request.session.get("userAccount", default="   ")
        return render(request, "home.html", {"userAccount":userAccount})
    def cart(request):
        userAccount = request.session.get("userAccount", default="   ")
        return render(request, "cart.html", {"userAccount":userAccount})
    def login(request):
        if request.method == "GET":
            fromPath = request.GET.get("from")
            return render(request, "login.html", {"fromPath":fromPath})
        else:
            userAccount = request.POST.get("userAccount")
            passwd      = request.POST.get("passwd")
            #     
            fromPath = request.GET.get("from")
            #   
            if userAccount == "sunck" and passwd == "sunck1999":
                #    
                #    ,      session
                request.session["userAccount"] = userAccount
                
                fromPath = "/" + fromPath + "/"
                return redirect(fromPath)
            else:
                #    
                return redirect("/login/?from=%s"%fromPath)
    from django.contrib.auth import logout
    def quit(request):
        logout(request)
        return redirect("/home/")

    有効期限
    ストレージセッション
    ≪データベース・ベース・セッション|Database Based Sessions|oem_src≫:デフォルトのセッション・ストレージSESSION_ENGINE='django.contrib.sessions.backends.db'
    ≪キャッシュ・ベース・セッション|Sessions Based Cached|oem_src≫:ローカル・メモリのみが存在し、失われた場合にはリカバリできません.データベースの読み書きよりも高速です.SESSION_ENGINE='django.contrib.sessions.backends.cache'
    データベースは永続化に使用され、キャッシュは効率化に使用され、まずキャッシュからデータを取得し、キャッシュはデータベースから取得されず、キャッシュに1部保存されます.SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
    redisキャッシュセッションの使用
    SESSION_ENGINE='redis_sessions.session'
    SESSION_REDIS_HOST='localhost'
    SESSION_REDIS_PORT=6379
    SESSION_REDIS_DB=0
    SESSION_REDIS_PASSWORD=''
    SESSION_REDIS_PREFIX='session'
    
    #  redis-cli       :
    127.0.0.1:6379> select 0
    OK
    127.0.0.1:6379[4]> keys *
    1) "session:0bjyuegx0i5ivyuzpb8ezgo0b35u2z4v"