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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Q&A

解決済

2回答

2590閲覧

データベースから表示する内容をユーザー別で分けたい

ryo2003

総合スコア15

Django

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

0グッド

0クリップ

投稿2020/12/28 06:46

編集2020/12/28 23:15

前提・実現したいこと

Django初心者です。今簡単なアプリを作っていて、ある程度完成しました。
このアプリではyoutubeのリンクとタイトルを追加して、そのリンク先で見れるようにしています。
一度herokuにあげて見たんですが、追加した内容は全てのデバイスで同じになってしまいます。
SwiftでRealmを使ったときはそこを気にする必要がなく、調べても出てこないため、どうすれば良いか悩んでいます。
ユーザーを認識して毎回新しいデータベースを作る必要があるのでしょうか。

補足情報

今作っているプロジェクトのファイル
https://github.com/ryo2003/tubeapp

使っているデータベース
mysql 5.7.28

何か他に必要な情報がありましたご指摘ください。

追記

ご指摘いただきありがとうございます。
タイトルを追加してそれを見れるだけというシンプルなアプリを作ったのでそれを使って再度説明させていただきます。

https://github.com/ryo2003/tubeapp

こちらでログイン機能も実装したのですが別のアカウントでログインしてもデータベースから取り出されて表示される内容は同じになってしまいます。どうすればアカウント別でデータを管理できるようになるのでしょうか。
特定のユーザーが登録した情報だけをログインしてるユーザーを認識して表示という機能を実装したいです。

アカウント作成のページはまだ作っておらず、アドミンページかコマンド上でしかまだアカウントは作れません。

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

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

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

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

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

m.ts10806

2020/12/28 06:53

Djangoのことはよくわかりませんが、「コード全部見て」という投げ方だとアドバイス得られづらいかと思います。 >https://teratail.com/help/question-tips#questionTips3-5-1 >多すぎず、少なすぎずという分量の判断は難しいことですが、読むのに苦痛ではないくらいの量に抑える必要があり、でも問題の本質がわかるほどには多くなければいけません。最も良いのは、現象を再現するためのミニマムなプログラムを改めて作ることです
hoshi-takanori

2020/12/28 07:08

Django は知りませんが、こちらのファイルがデータ定義でしょうか? https://github.com/ryo2003/tube-app/blob/master/tube_extension/models.py まさに「youtubeのリンクとタイトル」しか保存してなくて、誰がどのデバイスから登録したか区別してなさそうですし、そもそもユーザー登録とかログインという概念が存在しない (なぜか css だけはあるけど) ように見受けられますが…。
ryo2003

2020/12/28 22:57

ご指摘ありがとうございます。ログインの機能を実装した簡単なプロジェクトを作成しました。
hoshi-takanori

2020/12/28 23:00

ログイン機能を実装しただけでは不十分で、その上で ・登録時に、現在ログインしているユーザーの情報を記録し、 ・表示の際には、現在ログインしているユーザーが登録した情報だけを検索して表示 する必要があります。 (念のために書いておくと、モバイルアプリでは各デバイスにデータが保存されるので、自分が登録した情報しか見れませんが、Web ではすべてのユーザーが登録したデータは一箇所に保存されるため、すべてのデータを表示すれば他の人が登録したものも見えてしまうのです。)
ryo2003

2020/12/28 23:12

ユーザーとデータベース上のデータの紐付けのやり方が分からず悩んでおります。
guest

回答2

0

ベストアンサー

コメントに書いたとおり、ログイン機能を実装しただけでは不十分で、その上で
・データ定義を修正して、誰が登録したかを記録できるようにして、
・登録時に、現在ログインしているユーザーの情報を記録し、
・表示の際には、現在ログインしているユーザーが登録した情報だけを検索して表示
する必要があります。

Django さっぱり分かりませんが、試しにやってみました。

  1. tube_extension/models.py に登録したユーザーを表す user を追加 (migration の時に文句を言われるかも…)

diff

1 from django.db import models 2 from django.urls import reverse_lazy 3 from django_mysql.models import ListCharField 4+from django.contrib.auth.models import User 5 6 # Create your models here. 7 8 class Video(models.Model): 9 title = models.CharField( 10 max_length=255, 11 blank=False, 12 null=False) 13 14+ user = models.ForeignKey(User, on_delete=models.CASCADE) 15 16 # 以下略
  1. 現在のユーザーを model に保存

tube_extension/forms.py

diff

1 class VideoForm(forms.Form): 2 title = forms.CharField() 3 4- def save(self): 5+ def save(self, request): 6 data=self.cleaned_data 7 video = Video(title=data['title']) 8+ video.user = request.user 9 video.save()

tube_extension/views.py

diff

1 class VideoFormView(FormView): 2 # 略 3 4 def form_valid(self,form): 5- form.save() 6+ form.save(self.request) 7 return super().form_valid(form)
  1. tube_extension/views.py で、自分が登録したものだけ表示

diff

1 class VideoFormView(FormView): 2 # 略 3 4 def get_context_data(self, **kwargs): 5 ctx = super().get_context_data(**kwargs) 6- ctx['videos'] = Video.objects.all 7+ ctx['videos'] = Video.objects.filter(user=self.request.user) 8 return ctx

投稿2020/12/29 01:26

hoshi-takanori

総合スコア7901

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

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

ryo2003

2020/12/29 02:15

なるほど、その考え方はなかったです。ありがとうございます。
guest

0

会員登録制にすればできると思いますよ。
https://blog.narito.ninja/detail/38/
このブログが役立つかと思います。コピペで動きます。

投稿2020/12/28 08:26

yaha4967

総合スコア106

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

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

ryo2003

2020/12/28 23:14

ログイン機能を実装しただけではデータベースから表示するデータが全ユーザーで共有されてしまいます。それを直すにはどうしたら良いのでしょうか。特定のユーザーが登録した情報だけを表示というのができず困っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問