Python 3+Django get/post要求実現教程詳細


説明する
前に「Python 3+PyCharm+Django+Django REST frame ebook開発教程」を書きましたが、直接にrestを紹介したいと思って終わりました。しかし、振り返ってみると、一つはレストがデカップしながらフレームを複雑にしています。多端末がないと、そのレスは複雑さを下げずに複雑さを増しました。二つは基本的なgetとpostが自分を実現するかそれとも半日を見ます。djangoの従来のMVC開発を紹介するために、もう一枚書く必要があります。
環境構築プロジェクトは同じようなrest化部分を作成する前(2.5及び前)に操作すればいいです。説明を繰り返さないようにします。ここで作成したプロジェクトはdjango 1です。初期ディレクトリの構造は以下の通りです。

二、環境配置
自分で作成したプロジェクトがdjango 1でない場合、以下のすべてのdjango 1を自分のプロジェクト名に変更します。
 2.1カスタムテンプレートのパスとテンプレートの作成
編制django 1/django 1/setting.pyは、TEMPLATES変数に位置決めし、DIRSの値をBASE_に変更します。DIR+「/django 1/templates」、
django 1/django 1ディレクトリの下でtemplatesフォルダを作成し、その下でget.html、post.html、reult.3つのファイルを作成します。
get.1は、get提出のために使用されます。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>get    </title>
</head>
<body>
  <form action="/get" method="get">
    <input type="text" name="q" />
    <input type="submit" value="  " />
  </form>
</body>
</html>
posts.は、post提出に使います。{%}内はDjangoテンプレート文であることを表します。token%は、このフォームのロード時にtokenに戻ることを示し、その提出時にtoken認証を行う(サービスをオフにするなら、csrf付加御機能は、setting.py-M IDDEWARE--'django.middleware.csrf.cfrf Vieware'コメントを削除する)。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>post    </title>
</head>
<body>
  <form action="/post" method="post">
    {% csrf_token %}
    <input type="text" name="q" />
    <input type="submit" value="  " />
  </form>
</body>
</html>
result.html getとpost入力の内容を表示するために使用します。{}その内がDjangoテンプレート変数であることを表します。

<h1>{{ result }}</h1>
2.2設定要求ルート
Djangoのすべての要求ルートはurls.pyによって設定されています。たとえ存在する静的ファイルでもルーティングを設定してからアクセスできます。
指名手配django 1/django 1/urls.pyは、以下の内容に修正されました。

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from . import view

urlpatterns = [
  path('admin/', admin.site.urls),
  # url(r'^hello$', view.hello),
  url(r'^get\.html$', view.get_html),
  url(r'^get$', view.get),
  url(r'^post\.html$', view.post_html),
  url(r'^post$', view.post),
]
2.3処理ロジックの実現
2.2にget.html、get、post.を配置しました。postの四つの要求はそれぞれview.get_に渡しました。html、view.get、view.post_)、view.postは処理を行います。今回はこの四つの処理ロジックを実現します。
django 1/django 1フォルダでview.pyを作成し、以下の内容を書き込みます。

from django.shortcuts import render, render_to_response

def get_html(request):
  return render_to_response('get.html')

def get(request):
  context = {}
  #   request.GET['name']    get    
  # result      result.html      
  context['result'] = f"       :{request.GET['q']}"
  return render(request, 'result.html', context)

def post_html(request):
  #    get    render_to_response    render     ,         csrf_token
  # return render_to_response('post.html')
  return render(request, 'post.html')

def post(request):
  context = {}
  #   request.GET['name']    post    
  # result      result.html      
  context['result'] = f"       :{request.POST['q']}"
  return render(request, 'result.html', context)
その中の注意はコメントのように強調されています。)の中でレンダーを使ってはいけません。to_reponseはレンダーを使用してリダイレクトしなければならない。そうでないとサーバがtokenに戻ることができなくなり、token検証に失敗し、さらにページにアクセスできなくなる(403、CSRF token missing or incorect)。下図のように:

また、上記のように詳細なエラーメッセージを返しました。これは情報セキュリティではタブーですが、djangoではないです。DjangoではデフォルトでDEBUGモードをオンし、settings.pyではDEBUG=Falseを設定し、ALLOWED(u)を設定します。HOSTSでいいです。HOSTSとは、サービスへのアクセスを許可するIPではなく、外部からのサービスアドレスへのアクセスを許可するIPである)。

三、運転効果
3.1全体ディレクトリ構造
第二節の全ての操作により、プロジェクトディレクトリ構造は下図のようになっています。pycache構いません 

3.2運転効果
get要求ページ:

get要求結果:

ポスト要求ページ:

ポスト要求結果:

この記事は主にDjangoのget/postリクエストの簡単な方法を紹介します。Djangoの使用についてもっと知りたいです。下記のリンクをご覧ください。