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

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

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

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

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

629閲覧

[Django] postされたデータをDB(sqlite)に保存する方法が分からない

bakara1332

総合スコア13

Django

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

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/23 14:27

編集2018/07/28 12:48

文字数の関係で変更前の情報は削除させて頂きました。保管しておきますので、変更前の情報が知りたい方がいましたらすぐに提示します。
↓ 変更点(回答者様のURLを参考にさせて頂いたので構造はURLのものとあまり変わりません) ↓

python

1#models.py 2 3class Facility(models.Model): 4 id = models.IntegerField('施設ID', primary_key=True) 5 facility = models.CharField('施設名', max_length=100) 6 7 8class Snippet(models.Model): 9 facility_id = models.ForeignKey(Facility, on_delete=models.CASCADE, default='0') 10 name = models.CharField('ニックネーム', max_length=100, default='名無しさん') 11 title = models.CharField('タイトル', max_length=100, default='') 12 level = models.IntegerField('評価', default=3) 13 body = models.TextField() 14 linenos = models.BooleanField(default=False) 15 language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) 16 style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

python

1#serializers.py 2 3class SnippetSerializer(serializers.ModelSerializer): 4 class Meta: 5 model = Snippet 6 fields = ('facility_id', 'name', 'title', 'level', 'body')

python

1#views.py 2 3@csrf_exempt 4def snippet_list(request): 5 """ 6 List all code snippets, or create a new snippet. 7 """ 8 if request.method == 'GET': 9 snippets = Snippet.objects.all() 10 serializer = SnippetSerializer(snippets, many=True) 11 return JsonResponse(serializer.data, safe=False) 12 13 elif request.method == 'POST': 14 data = JSONParser().parse(request) 15 serializer = SnippetSerializer(data=data) 16 if serializer.is_valid(): 17 serializer.save() 18 return JsonResponse(serializer.data, status=201) 19 return JsonResponse(serializer.errors, status=400) 20 21 22@csrf_exempt 23def snippet_detail(request, pk): 24 """ 25 Retrieve, update or delete a code snippet. 26 """ 27 try: 28 snippet = Snippet.objects.filter(facility_id=pk) 29 except Snippet.DoesNotExist: 30 return HttpResponse(status=404) 31 32 if request.method == 'GET': 33 serializer = SnippetSerializer(snippet, many=True) 34 return JsonResponse(serializer.data, safe=False)

python

1#urls.py 2 3#プロジェクトレベル? 4urlpatterns = [ 5 path('admin/', admin.site.urls), 6 url(r'^', include('snippets.urls')), 7] 8 9#アプリレベル? 10urlpatterns = [ 11 url(r'^snippets/$', views.snippet_list), 12 url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail), 13]

またandroid studioの方はこんな感じになっております。これを実行しても、django側では何も起こらず下記のようなエラーになります。

Run

W/System.err: java.net.SocketTimeoutException: timeout W/System.err: at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:212) at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261) at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:215) at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306) at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300) at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196) at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191) at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80) at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:906) at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:782) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:463) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:521) at com.example.cso22.posttodjango.HttpSendJSON.execute(HttpSendJSON.java:63) at com.example.cso22.posttodjango.PostExecute.doInBackground(PostExecute.java:32) at com.example.cso22.posttodjango.PostExecute.doInBackground(PostExecute.java:9) at android.os.AsyncTask$2.call(AsyncTask.java:316) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:776) Caused by: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:151) at java.net.SocketInputStream.read(SocketInputStream.java:120) at com.android.okhttp.okio.Okio$2.read(Okio.java:136) at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211) ... 19 more

ソースコードです

java

1 2public class MainActivity extends AppCompatActivity { 3 4 private static final String TAG = "Hello"; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 11 PostExecute postJson = new PostExecute(); 12 postJson.execute(); 13 } 14} 15 16public class PostExecute extends AsyncTask<Void, Void, String> { 17 18 @Override 19 protected void onPostExecute(String response){ 20 System.out.println(response); 21 } 22 23 @Override 24 protected String doInBackground(Void... Void) { 25 26 //{"facility_id" : 3, "name" : "名前", "title" : "タイトル", "level": 3, "body" : "テキスト"} 27 String name = "名前", title = "タイトル", body = "テキスト"; 28 int level = 3, facility_id = 3; 29 30 String URL = "http://192.168.1.3/snippets"; 31 32 HashMap<String, Object> jsonMap = new HashMap<>(); 33 jsonMap.put("facility_id", facility_id); 34 jsonMap.put("name", name); 35 jsonMap.put("title", title); 36 jsonMap.put("level", level); 37 jsonMap.put("body", body); 38 39 40 HttpSendJSON httpSendJSON = new HttpSendJSON(); 41 String response = httpSendJSON.execute(URL, jsonMap); 42 return response; 43 } 44 45 46} 47 48public class HttpSendJSON { 49 public String execute(String argStrApiUrl, HashMap<String,Object> jsonMap) { 50 String ret = ""; 51 HttpURLConnection urlConnection = null; 52 try { 53 //ステップ1.接続URLを決める。 54 URL url = new URL(argStrApiUrl); 55 56 //ステップ2.URLへのコネクションを取得する。 57 urlConnection = (HttpURLConnection) url.openConnection(); 58 59 //ステップ3.接続設定(メソッドの決定,タイムアウト値,ヘッダー値等)を行う。 60 //接続タイムアウトを設定する。 61 urlConnection.setConnectTimeout(100000); 62 //レスポンスデータ読み取りタイムアウトを設定する。 63 urlConnection.setReadTimeout(100000); 64 //ヘッダーにUser-Agentを設定する。 65 urlConnection.setRequestProperty("User-Agent", "Android"); 66 //ヘッダーにAccept-Languageを設定する。 67 urlConnection.setRequestProperty("Accept-Language", Locale.getDefault().toString()); 68 //ヘッダーにContent-Typeを設定する 69 urlConnection.addRequestProperty("Content-Type", "application/json; charset=UTF-8"); 70 //HTTPのメソッドをPOSTに設定する。 71 urlConnection.setRequestMethod("POST"); 72 //リクエストのボディ送信を許可する 73 urlConnection.setDoOutput(true); 74 //レスポンスのボディ受信を許可する 75 urlConnection.setDoInput(true); 76 77 //ステップ4.コネクションを開く 78 urlConnection.connect(); 79 80 //ステップ5:リクエストボディの書き出しを行う。 81 OutputStream outputStream = urlConnection.getOutputStream(); 82 if (jsonMap.size() > 0) { 83 //JSON形式の文字列に変換する。 84 JSONObject responseJsonObject = new JSONObject(jsonMap); 85 String jsonText = responseJsonObject.toString(); 86 PrintStream ps = new PrintStream(urlConnection.getOutputStream()); 87 ps.print(jsonText); 88 ps.close(); 89 } 90 outputStream.close(); 91 92 //ステップ6.レスポンスボディの読み出しを行う。 93 int responseCode = urlConnection.getResponseCode(); 94 ret = convertToString(urlConnection.getInputStream()); 95 Log.d("execute", "URL:" + argStrApiUrl); 96 Log.d("execute", "HttpStatusCode:" + responseCode); 97 Log.d("execute", "ResponseData:" + ret); 98 } catch (IOException e) { 99 e.printStackTrace(); 100 } finally { 101 if (urlConnection != null) { 102 //7.コネクションを閉じる。 103 urlConnection.disconnect(); 104 } 105 } 106 return ret; 107 } 108 109 public String convertToString(InputStream stream) throws IOException { 110 StringBuffer sb = new StringBuffer(); 111 String line = ""; 112 BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8")); 113 while ((line = br.readLine()) != null) { 114 sb.append(line); 115 } 116 try { 117 stream.close(); 118 } catch (Exception e) { 119 e.printStackTrace(); 120 } 121 return sb.toString(); 122 } 123}

長文申し訳ありません。よろしくお願い致します。

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

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

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

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

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

m.ts10806

2018/07/23 21:56

関連の度合い次第ですが、以前の質問のURLを貼られた方がいいかもしれません。「再度投稿します」は要件とは違うのでタイトルには不要と思います。
m.ts10806

2018/07/23 22:04

質問内容に関係のなさそうなタグがあります(「Java」とか) 精査してください。
bakara1332

2018/07/24 00:16

有難うございます。修正させて頂きました。
guest

回答1

0

ベストアンサー

「このクラスです」 と提示されている 「JSONParsingMiddleware」 は実行されてしいますか?

普段Djangoを使っていますが、Middelwareで モデルの保存や参照をすることはしません。 本来であれば CommentViewSet が Commentモデルの作成/更新/一覧/削除のAPIとして利用できるはずなので、JSONParsingMiddleware は関係ないものと思われます。

restframework, Djagno には チュートアリルがあるので、ご参照ください。

投稿2018/07/27 16:23

tell_k

総合スコア2120

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

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

bakara1332

2018/07/28 10:40

有難うございます。 記載して下さったURLを基にいろいろとやって調べてみます。
bakara1332

2018/07/28 12:48

有益な情報を下さり、ありがとうございます! urlsやviewsでの簡単な構造、記述の仕方などわかった気がします。 記載して下さったURLを基に作ってみたので上で追記します。 android studioの方でも平行してPOSTメソッドを送るプログラムを作っているのですが、うまくいかず、django側で反応がないためしっかり遅れているかすらも把握できません。 図々しいお願いで申し訳ありませんが、もしよろしければ、またお力添えください。 宜しくお願いします。
tell_k

2018/07/28 16:02

Djangoがちゃんと起動してるかどうか、直接URL(http://192.168.1.3/snippets) を叩けば確認できる気がします。そこでエラーがでる、何も表示されないなどであれば、そもそもDjango側に問題があると思います。
bakara1332

2018/07/28 18:20

有難うございます。 URL自体が誤りでした。正しくは、(http://192.168.1.3/snippets/)と最後にスラッシュを付けないといけませんでした。 無事、ほとんどの作業が完了しました。 djangoを初めて2か月でまだまだ勉強していかなきゃなと思い知らされました。 後は、レイアウトや更なるコーディングなどを進めていきたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問