消しゴム、面白い高度なインターネットバグ。新シリーズ、一緒にDjangoの世界に入りましょう。
完成品
- スノーボール学習Python第3ラウンド、PythonWeb上のDjangoの世界
- 少し手を振るだけで、PythonDjangoを使用してマイクロブログシステムを実装できます
- Djangoは小さなバックエンドであり、詳細は少し完成されており、Pythonの第3段階を学ぶために雪だるま式に進んでいます
- Django QuerySetは少し学ぶだけで、少しで十分です
Snowball Learn Python Round 3
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回表示されることに注意してください。
次のコマンドを使用して、現在のアプリケーションを実行します。
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形式のデータを取得します。
JSON形式のデータは次のとおりです。中国語はUNICODEでエンコードされており
、下の図の青い長方形の領域をクリックするだけで、開発者ツールから直接クエリを実行することもできます。
アプリケーションが完了したら、リプレイ学習に進むことができます。
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
結果の効果は次のとおりです。
5.5このブログの要約
このブログはDjangoでのビューの学習に焦点を当てています。この記事は関数ベースのビュー(FBV)に基づいています。今後のブログでは、クラスベースのビュー(CBV)について学習します。クラスベースのビューは実際の開発で広く使用されています。たとえば、Djangoを使用してAPIを開発するための成熟したフレームワークでもありますDjango Rest Framework
。
関連資料
- 100個のPythonクローラーチュートリアル、優れたクローラーチュートリアル、今すぐ購読
- Pythonゲームの世界(更新、記事の目標数は50以上、今すぐ購読、すべて古いファンです)
- Pythonクローラーレッスン、9つの素晴らしい講義
DjangoWeChatアップルトモールDjangoチュートリアル2020PHPはとてもクールですDjangoと春はDjangoオープンソースプロジェクトを比較します大企業がvuepythonのDjangoフレームワークをめったに使用しない理由DjangoDjangoエンタープライズ開発コンバットpdfのインストール方法今日は連続執筆の122日目/ 200日目です。
緊密な関係のブロガーを構築したい場合は、同じ名前のドリームイレーサーの公開番号に焦点を当て、面白いシニアインターネットワームと緊密に連絡を取ることができます。
ブロガーID:Dream Eraser、みんなが好き、コメント、お気に入りだといいのですが。