Django | how to write view.py


views.ピラン
views.pyファイルは、ハンドヘルドアプリケーションのコアです.models.pyファイルがデータベースへの接続を意味する場合、ビュー.pyは、クライアントに転送されたデータをCRUDを介してデータベースに反映し、クライアントの要求に直接応答する責任を負います.
views.pyファイルを作成する前に
  • サーバドライバ
  • クライアント要求
  • と仮定する.
  • urls.pyで作成された
  • サーバは、フロントのリクエストを受信するために駆動する必要があります.urls.pyファイルはmanage.pyが存在するプロジェクトの最上位ディレクトリに作成すればいいです.urls.pyは、各プロジェクト、各アプリケーションに存在します.でも、トップURL.pyファイルの役割は、フロントのリクエストがどのアプリケーションを実行すべきか、どのロジック(views.py)を実行すべきかを示すことです.
    turn on server
    manage.pyファイルを含むプロジェクトの最上位ディレクトリで実行
    $ python manage.py runserver
    request from Client
    フロントがなければ、サーバ開発者はアプリケーションのロジックが正しく動作しているかどうかを知ることができません.したがって、httppieを介してサーバに要求を送信し、論理が正常に動作しているかどうかを検証することができる.
    httpieのインストール
    $ brew install httpie
    サーバリクエスト
    $ http GET(혹은 POST) localhost:8000/경로(ex. 앱명)
    urls.pyの作成
    プロジェクトディレクトリ(プロジェクトディレクトリ内のプロジェクト名と同じディレクトリ)でurlsを使用します.pyファイルを作成します.urls.pyファイルは、サーバがリクエストを発行すると、まず反応して、どのアプリケーションに接続するviewsファイルを決定するウィザードです.次のコードはdjangoのurlsです.これは、pyファイルの内蔵関数path,includeをインポートし、path関数を介してアプリケーションへのパス(url)、すなわちinclude関数内のパス(アプリケーションのurls.pyファイル)に入ることを意味します.
    from django.urls import path, include
    
    urlpatterns = [
    	path(‘앱명’, include(‘앱명.urls’))
    app内のurls.pyの作成
    プロジェクト自体のurls.pyファイルの作成が完了したら、appディレクトリのurlsに続きます.pyファイルを作成する必要があります.まずpath関数をライブラリからインポートし、アプリケーションディレクトリのviewsを作成します.pyファイルからクラスをインポートします.path('')はパス(url)、as view()関数はビューを表します.pyの対応するクラスに方向を作成します.
    as_view()
    クラスのインスタンスを作成してurlのパスを設定します.
    from django.urls import path
    from .views import <views.py의 클래스명>
    
    urlpatterns = [
    	path(‘’, <views.py의 클래스명>.as_view())
    ]
    アプリケーション内のビュー.pyの作成
    json
    JavaScript Object Notationの略として、JS構文に従ってデータをグループ化して渡す形式
    View
    djanogoのviewsモジュールのclass View
    HttpResponse
    class HttpRequest,ページロード時に要求メタデータを含むオブジェクトのclassを生成する
    JsonResponse
    応答jsonファイルによって符号化された応答をHttpResponseのサブクラスのクラスとする
    json.loads()
    Pythonがクライアントからの応答のjsonフォーマットデータを読み取ることができるように、データ間を切り替える方法.
    Model.objects.create()
    データベース内のモデルのテーブルにLowを追加するクエリー文.
    import json
    from django.views import View
    from django.http import JsonResponse, HttpResponse
    from .models import Menu, Category
    
    class CategoryView(View):
        def get(self, request):
        	result = []
        	categories = Category.objects.all()
            for category in categories:
            	result.append({'id': category.id, 'name': category.name})
           	return JsonResponse({'result': result}, status: 200)
            
        def post(self, request):
        	data = json.loads(request.body)
            Menu.objects.create(name=data['name'])
            
            return JsonResponse({'message':'SUCCESS',status=201})
    class CategoryViewは、GET、POST要求に従って2つの関数を含む.
    結果
    httpieを介してクライアントリクエストが発行されたと仮定してサーバを開きます.
    サーバ接続
    $ python manage.py runserver
    GET
    サーバリクエスト
    $ http GET localhost:8000/경로(ex. 앱명)
    応答200 OKは、通信が成功したことを示す.
    HTTP/1.1 200 OK
    Content-Length: 856
    Content-Type: application/json
    Date: Tue, 03 Nov 2020 04:27:37 GMT
    Referrer-Policy: same-origin
    Server: WSGIServer/0.2 CPython/3.8.5
    X-Content-Type-Options: nosniff
    X-Frame-Options: DENY
    
    {
        "result": [
            {
                "id": 1,
                "name": "콜드브루 커피"
            },
            {
                "id": 2,
                "name": "브루드 커피"
            },
            {
                "id": 3,
                "name": "에스프레소"
            }
         ]
     }
    
    POST
    サーバリクエスト
    $ http POST localhost:8000/경로(ex. 앱명) name = '주류'
    応答
    HTTP/1.1 201 Created
    Content-Length: 22
    Content-Type: application/json
    Date: Tue, 03 Nov 2020 08:11:10 GMT
    Referrer-Policy: same-origin
    Server: WSGIServer/0.2 CPython/3.8.5
    X-Content-Type-Options: nosniff
    X-Frame-Options: DENY
    
    {
        "message": "SUCCESS"
    }
    Table of Database
    飲料や食品を格納するmenu表に「酒類」という新しいデータが登場した.
    mysql> select * from menu;
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | 음료    |
    |  2 | 푸드    |
    |  3 | 주류    |
    +----+--------+