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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1581閲覧

djangoのGetメソッドについて。Getリクエスト受け取り毎に更新後情報が欲しいのに、更新前?の情報が返ってくる。

bakara1332

総合スコア13

Django

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/10/26 01:47

編集2018/10/26 10:44

掲示板?のようなものをを作りたいと思っています。
そこで、まずはシンプルなものからと思い、以下の機能を開発しようとしています。

①android stdioのedit text等に項目を入力後コメント投稿用のボタンでdjangoのデータベースに保存する。
②コメント一覧表示用のボタンでデータベースに入っている情報を取得し表示させる。

①の処理は問題なくできたのですが、いくらPOSTメソッドで情報を追加して②の処理をしても初め?に取得した情報と同じ情報が返ってきます。

汚く無駄の多いコードで申し訳ないですがよろしくお願いします。

java

1//対応するボタンを押したらGetTaskクラス呼び出し 2  GetTask getTask = new GetTask(){ 3 @Override 4 protected void onPostExecute(String result) { 5 6 //クリア 7 PublicJsonArray.body.clear(); 8 PublicJsonArray.level.clear(); 9 PublicJsonArray.title.clear(); 10 PublicJsonArray.name.clear(); 11 PublicJsonArray.facility_id.clear(); 12 13 JSONObject jsonObject; 14 System.out.print("ViewCommentActivity" + PublicJsonArray.jsonArray); 15 for(int i = 0; i < PublicJsonArray.jsonArray.length(); i++){ 16 try { 17 //データベースから取得した値を属性ごとに各配列に格納 18 jsonObject = (JSONObject) PublicJsonArray.jsonArray.get(i); 19 PublicJsonArray.facility_id.add(jsonObject.getInt("facility_id")); 20 PublicJsonArray.name.add(jsonObject.getString("name")); 21 PublicJsonArray.title.add(jsonObject.getString("title")); 22 PublicJsonArray.level.add(jsonObject.getInt("level")); 23 PublicJsonArray.body.add(jsonObject.getString("body")); 24 } catch (JSONException e) { 25 e.printStackTrace(); 26 } 27 } 28 29 TextView textView = (TextView)findViewById(R.id.text_view); 30 textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 31 textView.append("\r\n"); 32 textView.append(PublicJsonArray.body.size() + "項目あります" + "\r\n"); 33 for(int i = 0; i < PublicJsonArray.body.size(); i++){ 34 //配列に格納した情報をTextViewにそのまま表示 35 textView.append("施設ID : " + PublicJsonArray.facility_id.get(i).toString() + "\r\n "); 36 textView.append("ニックネーム : " + PublicJsonArray.name.get(i) + "\r\n "); 37 textView.append("タイトル : " + PublicJsonArray.title.get(i) + "\r\n "); 38 textView.append("評価 : " + PublicJsonArray.level.get(i).toString() + "\r\n "); 39 textView.append("テキスト : " + PublicJsonArray.body.get(i) + "\r\n "); 40 textView.append("\r\n \r\n "); 41 } 42 43 } 44 }; 45 getTask.execute(""); //ここに施設IDを入力するとフィルタリングできる(例 : 2/) 46 47//GetTaskクラス 48import android.os.AsyncTask; 49 50public abstract class GetTask extends AsyncTask<String, Void, String>{ 51 52 @Override 53 protected abstract void onPostExecute(String result); 54 55 @Override 56 protected String doInBackground(String... strings) { 57 String URL = "http://X.X.X.X/snippets/"; //X.X.X.XはIPアドレス 58 59 GetClass getClass = new GetClass(); 60 String str = getClass.Getexecute(URL); 61 return str; 62 } 63 64}     65 66//GetClassクラス 67public class GetClass { 68 /** 69 * GETメソッドで文字列を取得する。 70 * 71 * @param URL アクセスするURL 72 * @return レスポンス 73 */ 74 public String Getexecute(String URL) { 75 HttpURLConnection urlConnection = null; 76 int responseCode = 0; 77 String responseData = ""; 78 try { 79 //ステップ1:接続URLを決める。 80 URL url = new URL(URL); 81 82 //ステップ2:URLへのコネクションを取得する。 83 urlConnection = (HttpURLConnection) url.openConnection(); 84 //ステップ3:接続設定(メソッドの決定,タイムアウト値,ヘッダー値等)を行う。 85 //接続タイムアウトを設定する。 86 urlConnection.setConnectTimeout(100000); 87 //レスポンスデータ読み取りタイムアウトを設定する。 88 urlConnection.setReadTimeout(100000); 89 //ヘッダーにUser-Agentを設定する。 90 urlConnection.setRequestProperty("User-Agent", "Android"); 91 //ヘッダーにAccept-Languageを設定する。 92 urlConnection.setRequestProperty("Accept-Language", Locale.getDefault().toString()); 93 //HTTPのメソッドをGETに設定する。 94 urlConnection.setRequestMethod("GET"); 95 //リクエストのボディ送信を許可しない 96 urlConnection.setDoOutput(false); 97 //レスポンスのボディ受信を許可する 98 urlConnection.setDoInput(true); 99 //ステップ4:コネクションを開く 100 urlConnection.connect(); 101 //ステップ6:レスポンスボディの読み出しを行う。 102 responseCode = urlConnection.getResponseCode(); 103 responseData = convertToString(urlConnection.getInputStream()); 104 } catch (IOException e) { 105 e.printStackTrace(); 106 } finally { 107 if (urlConnection != null) { 108 //ステップ7:コネクションを閉じる。 109 urlConnection.disconnect(); 110 } 111 } 112 Log.d("execute", "URL:" + URL); 113 Log.d("execute", "HttpStatusCode:" + responseCode); 114 Log.d("execute", "ResponseData:" + responseData); 115 return responseData; 116 117 } 118 public String convertToString(InputStream stream) throws IOException { 119 StringBuffer sb = new StringBuffer(); 120 String line = ""; 121 BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8")); 122 while ((line = br.readLine()) != null) { 123 sb.append(line); 124 try { 125 jsonArray = new JSONArray(line); 126 } catch (JSONException e) { 127 e.printStackTrace(); 128 } 129 } 130 try { 131 stream.close(); 132 br.close(); 133 } catch (Exception e) { 134 e.printStackTrace(); 135 } 136 137 return sb.toString(); 138 } 139} 140

django

python

1#Views.py 2 3from django.shortcuts import render 4from django.http import HttpResponse, JsonResponse 5from django.views.decorators.csrf import csrf_exempt 6from rest_framework.renderers import JSONRenderer 7from rest_framework.parsers import JSONParser 8from snippets.models import Snippet 9from snippets.serializers import SnippetSerializer 10 11 12# Create your views here. 13@csrf_exempt 14def snippet_list(request): 15 """ 16 List all code snippets, or create a new snippet. 17 """ 18 19 20 if request.method == 'GET': 21 snippets = Snippet.objects.all() 22 serializer = SnippetSerializer(snippets, many=True) 23 return JsonResponse(serializer.data, safe=False) 24 25 elif request.method == 'POST': 26 data = JSONParser().parse(request) 27 serializer = SnippetSerializer(data=data) 28 if serializer.is_valid(): 29 serializer.save() 30 return JsonResponse(serializer.data, status=201) 31 return JsonResponse(serializer.errors, status=400) 32 op 33 34@csrf_exempt 35def snippet_detail(request, pk): 36 """ 37 Retrieve, update or delete a code snippet. 38 """ 39 40 try: 41 snippet = Snippet.objects.filter(facility_id=pk) 42 except Snippet.DoesNotExist: 43 return HttpResponse(status=404) 44 45 if request.method == 'GET': 46 serializer = SnippetSerializer(snippet, many=True) 47 return JsonResponse(serializer.data, safe=False) 48 49#setting.py 50import os 51 52BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 53 54 55 56SECRET_KEY = ? 57 58DEBUG = True 59 60ALLOWED_HOSTS = ["X.X.X.X"] 61 62 63 64INSTALLED_APPS = [ 65 'django.contrib.admin', 66 'django.contrib.auth', 67 'django.contrib.contenttypes', 68 'django.contrib.sessions', 69 'django.contrib.messages', 70 'django.contrib.staticfiles', 71 'rest_framework', p 72 'snippets.apps.SnippetsConfig', 73] 74 75MIDDLEWARE = [ 76 'django.middleware.security.SecurityMiddleware', 77 'django.contrib.sessions.middleware.SessionMiddleware', 78 'django.middleware.common.CommonMiddleware', 79 'django.middleware.csrf.CsrfViewMiddleware', 80 'django.contrib.auth.middleware.AuthenticationMiddleware', 81 'django.contrib.messages.middleware.MessageMiddleware', 82 'django.middleware.clickjacking.XFrameOptionsMiddleware', 83] 84 85ROOT_URLCONF = 'tutorial.urls' 86 87TEMPLATES = [ 88 { 89 'BACKEND': 'django.template.backends.django.DjangoTemplates', 90 'DIRS': [], 91 'APP_DIRS': True, 92 'OPTIONS': { 93 'context_processors': [ 94 'django.template.context_processors.debug', 95 'django.template.context_processors.request', 96 'django.contrib.auth.context_processors.auth', 97 'django.contrib.messages.context_processors.messages', 98 ], 99 }, 100 }, 101] 102 103WSGI_APPLICATION = 'tutorial.wsgi.application' 104DATABASES = { 105 'default': { 106 'ENGINE': 'django.db.backends.sqlite3', 107 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 108 } 109} 110 111 112AUTH_PASSWORD_VALIDATORS = [ 113 { 114 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', p 115 }, 116 { 117 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 118 }, 119 { 120 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 121 }, 122 { 123 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 124 }, 125] 126 127 128 129LANGUAGE_CODE = 'ja' 130 131TIME_ZONE = 'Asia/Tokyo' 132 133USE_I18N = True 134 135USE_L10N = True 136 137USE_TZ = True 138 139APPEND_SLASH = False 140 141STATIC_URL = '/static/'

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

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

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

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

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

Meganezaru

2018/10/26 04:59

djangoのsetting.pyはどうなっているでしょうか?cache関連のミドルウェアなど入っていないですかね?
bakara1332

2018/10/26 10:27

返信が遅れて申し訳ありません。 すぐに修正します。
bakara1332

2018/10/26 10:50

調べたら出てきました。'django.middleware.common.CommonMiddleware'を無くせばいいですかね?
Meganezaru

2018/10/28 23:44

リファレンスを見る限り、CommonMiddlewareは無関係に感じました。どっちかというと、rest_frameworkがcacheを効かせてるんじゃないかと思いましたが、こちらも、明示的にcacheを使う設定をしないと効かないっぽいですね・・・ちなみに確認に利用しているのは、IEではないですよね??
bakara1332

2018/10/29 02:32 編集

確認にはchromeとvisual studio(実機)を使用しています。 実機にてGETリクエストを送ってみたところ、djangoの方のログで初回リクエスト時は404コードと200コードが表示されるんですが、それ以降は何も表示されませんでした。一応その時のログを下に記述しておきます。
bakara1332

2018/10/29 02:31

[29/Oct/2018 11:23:30] "GET /favicon.ico HTTP/1.1" 404 2339 [29/Oct/2018 11:25:29] "GET /snippets/ HTTP/1.1" 200 12374
bakara1332

2018/10/29 02:48

ちなみにAWSを使っています。
Meganezaru

2018/10/29 03:08

サーバーでcacheを返す場合は、304が戻るはずですので、それが戻ってきてないということであれば、ブラウザのキャッシュが効いているかもしれないですね。
bakara1332

2018/10/29 03:27

ブラウザでは更新した情報を表示してくれるんですが、android studioを使った実機テストでうまく表示してくれません。android studio又は実機の方でcache設定的なものがある可能性ってありますかね?
guest

回答1

0

ベストアンサー

サーバーサイドではなく、Java部分が影響しているようですね。
(Javaは勉強したことがあるレベル・・・(^_^;)なので、詳細はわかりかねます。申し訳ないです。)

URLConnectionには、cacheにまつわる設定があるようですので、
設定内容を確認してみてはどうでしょうか?

Java

1getUseCaches();

cacheを使わないようにするには、

Java

1setUseCaches(False);

とすれば、良いようです。

setUseCaches

投稿2018/10/29 05:02

Meganezaru

総合スコア715

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

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

Meganezaru

2018/10/29 05:04

setする場合は、connect?以前にしないと、例外が発生するようです。 念の為。
bakara1332

2018/10/29 06:54

有難うございます!諸事情により確認できるのが11月1日になってしまうので、遅くなって申し訳ありませんが1日に確認でき次第すぐにこの質問を閉じさせていただきます。
bakara1332

2018/11/01 06:04

setUseCachesについて試してみたのですがいまだ原因が何なのかわかりませんでした。しかしこれ以上お時間をいただくの申し訳ないと思いますのでいったん自分で試行錯誤してみます。それでもわからなければまた質問させていただきます。 長い間ありがとうございました。
Meganezaru

2018/11/01 06:11

そうでしたか、残念です・・・ お役にたてず申し訳ないです(^_^;)
bakara1332

2018/11/05 05:15

色々と調べてみた結果、解決することができましたので一応載せておきます! HttpURLConnectionクラスにおけるキャッシュ関連のメソッドにはsetUseCaches(boolean)やsetDefaultCaches(boolean)がありましたが、私の場合はconnect()前にurlConnection.setRequestProperty("Cache-Control", "no-cache")と入力することによって目的の動作にすることができました。
Meganezaru

2018/11/05 07:36

解決してよかったです^_^ 私も、Javaを利用する時には、参考にさせてもらいます!
bakara1332

2018/11/05 07:56

ぜひぜひ! 最後までお付き合いいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問