このブログを読んだ後、PythonDjangoの半分を学びます

消しゴム、面白い高度なインターネットバグ。新シリーズ、一緒にDjangoの世界に入りましょう。

完成品

5、PythonDjangoビュー

5.1ビューはJSONデータを返します

実際の作業では、Python Webエンジニアがインターフェースデータをフロントエンドエンジニアにフィードバックします。インターフェースは一般にAPIと呼ばれます。返されるデータの一般的な形式はXMLまたはJSONです。次に、最も一般的なJSON形式のデータを例として取り上げます。 Djangoがデータベースからフォアグラウンドにデータを送信する方法を詳しく説明してください。

views.pyファイルを変更します。

from django.shortcuts import render
# 导入 JSON 格式数据响应类
from django.http import JsonResponse
from .models import Blog

# Create your views here.
def blog_list(request):
    blogs = Blog.objects.all()
    # 用列表生成器生成一个对象
    context = {
    
    
        "data": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs]
    }
    return JsonResponse(context)

クラスのインポートヘッダーファイルmodels、オブジェクトを返すBlog新しいblog_list関数を追加JsonResponseします。

5.2ルートを作成する

ルーティング関連の資料は将来補足される予定です。このブログは、さまざまなURLを介してさまざまなデータを返す方法を知っているだけで済みます。
ブログフォルダに新しいファイルを作成しますurls.py。コードの内容は次のとおりです。

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list)
]

ファイル書き込みコードが完了しました。また、ファイルmy_website内のフォルダーをurls.py変更して、以下を変更する必要があります。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
    path('admin/', admin.site.urls),
]

この時点で、以下に示すようなプロジェクトファイル構造urls.py。ファイルが2回表示されることに注意してください
このブログを読んだ後、PythonDjangoの半分を学びます
次のコマンドを使用して、現在のアプリケーションを実行します。

python manage.py runserver

直接アクセスhttp://127.0.0.1:8000/は、ディレクトリへのアクセスを要求する次のエラーから外れます。入力しhttp://127.0.0.1:8000/adminアクセスをブログの前に背景関与入力http://127.0.0.1:8000/blog/list/JSON形式のデータを取得します。
このブログを読んだ後、PythonDjangoの半分を学びます
JSON形式のデータは次のとおりです。中国語はUNICODEでエンコードされており
このブログを読んだ後、PythonDjangoの半分を学びます
、下の図の青い長方形の領域をクリックするだけで、開発者ツールから直接クエリを実行することもできます。
このブログを読んだ後、PythonDjangoの半分を学びます
アプリケーションが完了したら、リプレイ学習に進むことができます。

URLアドレスを介してアクセスすると、そのアドレスにアクセスすると/blog、Djangourls.py構成、つまり次のコードが自動的に読み込まれます。

urlpatterns = [
    path('blog/', include('blog.urls')),
    path('admin/', admin.site.urls),
]

一致するものがURLblog/見つかりblog.urls、ファイルをロードします。コードに対応するファイルは次のとおりです。

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list)
]

これにはlist/マッチャーが含まれているため、JSON形式のデータを返すために使用されるblog/list/viewblog_view.blog_list関数を呼び出すことによってblog_viewインポートされたviewモジュールの名前がcomeに変更れ、ヘッダーのコードに注意してくださいimport blog.views as blog_views

def blog_list(request):
    blogs = Blog.objects.all()
    # 用列表生成器生成一个对象
    context = {
    
    
        "data": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs]
    }
    return JsonResponse(context)

最初に論理的な関係を理解し​​、次に専門的な文法の定義を補足します。

5.3拡張詳細ページ

上記のロジックでは、単一のインターフェイスのブログデータに戻った後、最初にviews.pyファイルを編集します。

def detail(request, blog_id):
    blog = Blog.objects.get(id=blog_id)

    blog = {
    
    
        "id": blog.id,
        "title": blog.title,
        "content": blog.content,
        "create_time": blog.create_time
    }
    return JsonResponse(blog)

拡張詳細ページ、スペルミスが見つかりました、create_time後で変更し、次のコマンドsqlite注意して再生成してください。

> python manage.py makemigrations blog
Did you rename blog.creatr_time to blog.create_time (a DateField)? [y/N] y
Migrations for 'blog':
  blog\migrations\0002_auto_20210329_0940.py
    - Rename field creatr_time on blog to create_time

コマンドが終了したら、次のコマンドを実行します。

>python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0002_auto_20210329_0940... OK

blogフォルダurls.pyファイルの変更を続けます。コードは次のとおりです。

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list),
    path('detail/<int:blog_id>', blog_views.detail)
]

上記のコードの準備が完了するhttp://127.0.0.1:8000/blog/detail/1と、単一のブログデータ取得、URLアドレス形式になりますhttp://127.0.0.1:8000/blog/detail/{整数序号}

アドレス内の整数。バックグラウンドをblog_id取得できますが、メソッドにblog_id渡されdetailます。

<int:blog_id>前述のことを説明する特別な必要性があるコードはintパスコンバーターと呼ばれ、一般的なパスコンバーターには次のものがあります。

  • str:デフォルト値である空でない文字列に一致します。
  • int:ゼロまたは正の整数に一致します。
  • uuid:特定のタイプの文字列形式に一致します。
  • path:空でない文字に一致します/を含むパスアドレスに一致させることができます

以下のブログでは、上記の内容を取り上げ、最初に適用します。結局のところ、スノーボールシリーズは繰り返し学習するコラムです。

5.4ページングの実装

次に、blog_list拡張するメソッドに進み、ページング操作を実装します。コアコード参照を次のコンテンツに変換views.pyするblog_list(request)方法に焦点を当てます。

from django.shortcuts import render
# 导入 JSON 格式数据响应类
from django.http import JsonResponse
# 导入分页组件
from django.core.paginator import Paginator
from .models import Blog

# Create your views here.
def blog_list(request):
    # blogs = Blog.objects.all()
    # # 用列表生成器生成一个对象
    # context = {
    
    
    #     "data": [{"id": blog.id, "title": blog.title} for blog in blogs]
    # }
    # 页码默认获取 page 参数,默认值为 1
    page = request.GET.get("page", 1)
    # 默认每页 20 条数据
    page_size = request.GET.get("page_size", 20)

    # 获取全部数据
    blog_all = Blog.objects.all()
    # 分页对象
    paginator = Paginator(blog_all, page_size)

    # 当前页码
    current_page = paginator.get_page(page)
    blogs = current_page.object_list

    context = {
    
    
        "blog_list": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs],
        "paginator": {
    
    
            "total_count": paginator.count,
            "num_pages": paginator.num_pages,
            "page_size": paginator.per_page,
            "page_number": current_page.number
        }
    }

    return JsonResponse(context)

事前に取得from django.core.paginator import PaginatorするBlog.objects.all()方法によって後続のコンテンツデータをページングするためのコードページング手段の上部に導入され、後続の学習コンテンツに進められる本実施形態の効率は、セクションによって変更される。

書き込み後、ページング効果はURL関連のパラメーターを介して実現できます。アクセスのhttp://127.0.0.1:8000/blog/list/?page=1&page_size=1結果の効果は次のとおりです。
このブログを読んだ後、PythonDjangoの半分を学びます

5.5このブログの要約

このブログはDjangoでのビューの学習に焦点を当てています。この記事は関数ベースのビュー(FBV)に基づいています。今後のブログでは、クラスベースのビュー(CBV)について学習します。クラスベースのビューは実際の開発で広く使用されています。たとえば、Djangoを使用してAPIを開発するための成熟したフレームワークでもありますDjango Rest Framework

関連資料

  1. 100個のPythonクローラーチュートリアル、優れたクローラーチュートリアル、今すぐ購読
  2. Pythonゲームの世界(更新、記事の目標数は50以上、今すぐ購読、すべて古いファンです)
  3. Pythonクローラーレッスン、9つの素晴らしい講義

今日は連続執筆の122日目/ 200日目です
緊密な関係のブロガーを構築したい場合は、同じ名前のドリームイレーサーの公開番号に焦点を当て、面白いシニアインターネットワームと緊密に連絡を取ることができます
ブロガーID:Dream Eraser、みんなが好きコメントお気に入りだといいのですが。

DjangoWeChatアップルトモールDjangoチュートリアル2020PHPはとてもクールですDjangoと春はDjangoオープンソースプロジェクトを比較します大企業がvuepythonのDjangoフレームワークをめったに使用しない理由DjangoDjangoエンタープライズ開発コンバットpdfのインストール方法

おすすめ

転載: blog.csdn.net/hihell/article/details/115284224