質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

1260閲覧

djangoでajaxを使いたい

yuudai

総合スコア65

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/05/31 15:58

前提・実現したいこと

djangoでajaxを使ってボタンを押す毎にプラス1していく機能を作りたいです。
しかしajaxについて調べてもピンとこなかったので質問します。
エラー的にデータベースが何かだめなのかと思うのですが、いろんなとこで根本的に間違っている気がします。
あとajaxを使うとき存在しないpathを使えるのかな?と疑問

発生している問題・エラーメッセージ

AttributeError at /makedata/ajax/ 'bool' object has no attribute 'get'

該当のソースコード

makedata.html

<div id="ajax"> <span id="id_div_ajax_response"> AJAX RESPONSE </span> </div> <form id="ajax-add-post" action="{% url 'makedata:ajax' %}" method="POST"> <button type="submit">次の投球へ</button> {% csrf_token %} </form> <script> function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(c ookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); function csrfSafeMethod(method) { // these HTTP methods do not require CSRF protection return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ beforeSend: function (xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); // 送信ボタンで呼ばれる $("form").submit( function(event) { event.preventDefault(); var form = $(this); $.ajax({ url: form.prop("action"), method: form.prop("method"), data: form.serialize(), timeout: 10000, dataType: "text", }) .done( function(data) { $("#id_div_ajax_response").text(data);ここで+1していけるのかなと思ってる }) }); </script>

models.py

class User(models.Model): user = models.CharField(max_length=255) game_count = models.IntegerField(default=1)

views.py

def user(request): try: user = User.objects.get(pk=1) except User.DoesNotExist: return False user.game_count += 1 user.save() game_count = User.objects.get(pk=1).game_count hoge = "Ajax Response: " + game_count return HttpResponse(hoge)

urls.py

from django.urls import path from . import views #from django.contrib.auth import views as auth_views app_name = "makedata" urlpatterns = [ path('relay/', views.relay, name='relay'), path('makedata/', views.makedata, name='makedata'), path('makedata/ajax/', views.user, name="ajax"), ]

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まず、makedata/ajax/にアクセスしただけで+1されますよね。だから、

Python

1def user(request): 2 try: 3 user = User.objects.get(pk=1) 4 except User.DoesNotExist: 5 return False 6 if request.method == "POST": 7 user.game_count += 1 8 user.save() 9 game_count = User.objects.get(pk=1).game_count 10 hoge = "Ajax Response: " + game_count 11 return HttpResponse(hoge) 12```request.method == "POST" で分岐ですね。 13Ajaxはよくわからないけど...

投稿2020/06/01 01:57

ForestSeo

総合スコア2722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuudai

2020/06/01 03:31

分岐してもエラー内容は変わりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問