2017-03-09 7 views
-3

Flask REST APIを実際のDjango APPに移植するのに苦労しています。私は研究しましたが、私の問題に対する解決策を見つけることができませんでした。Flask REST APIをDjangoアプリケーションに変換

(MovieLensデータセットに基づく)映画推薦システム用です。 は基本的に私は、このアーキテクチャから移動したい:この1へ Flask APIDjango app

フラスコのAPIは非常に簡単であると私はポストマンでそれをテストする際に適しています:

ジャンゴで
from flask import Flask, jsonify, request 
from movieEngine import MovieRecommender 
import sqlite3 

app = Flask(__name__) 

@app.route('/prediction/<int:userId>',methods=['GET']) 
def get(userId): 
    result = recommendation_engine.predictInterest(userId) 
    return jsonify(result) 

@app.route('/add',methods=['POST']) 
def add(): 
    userId = request.json['userId'] 
    movieId = request.json['movieId'] 
    rating = request.json['rating'] 
    result = recommendation_engine.addData(userId,movieId,rating) 
    return jsonify(result) 

if __name__ == '__main__': 
    global recommendation_engine 
    global database 
    database = './data/RecommenderSystem.db' 
    sqlconnector = sqlite3.connect(database,check_same_thread=False) 
    recommendation_engine = MovieRecommender(sqlconnector) 
    app.run(debug=True) 

、私は既に持っていますセットアップメインModels.py

from django.db import models 

class User(models.Model): 
    name = models.CharField(max_length=256, null=True) 
    def __str__(self): 
     return self.name 

class Movie(models.Model): 
    title = models.CharField(max_length=256) 
    def __str__(self): 
     return self.title 

class Rating(models.Model): 
    user = models.ForeignKey(User) 
    movie = models.ForeignKey(Movie) 
    rating = models.FloatField() 
    timestamp = models.DateTimeField(auto_now=True) 
    def __str__(self): 
     return 'User {:} rated movie {:} --> {:}/5 '.format(self.user,self.movie,self.rating) 

class Recommendation(models.Model): 
    user = models.ForeignKey(User) 
    top5 = models.CharField(max_length=256) 
    def __str__(self): 
     return 'Recommendation for user {:}'.format(self.user) 

勧告テーブルに格納された値は、単純に5映画のIDのリストを含む文字列です。

5映画の名の実際のリストにこの文字列をオンにする方法上の任意のアイデア? 勧告テーブルに格納されているすべての提案やアイデアは非常に高く評価されます:)

+0

あなたはdjango rest frameworkを調べるべきです。また、Top5を格納するManyToManyField私はそれをコード化したくないので答えていません。:) –

+0

wrt /残りの部分は、軽くて落ち着かないことを確認してください。https://github.com/toastdriven/restless –

答えて

0

値は、単純に5つの映画のIDのリストを含む文字列です。非常に悪いデザインだ

UserMovieの間にordered many to many relationshipが必要です。

CF上記5映画の実際のリストにこの文字列をオンにする方法上の任意のアイデア。

+0

一般的なケース数多くの関係が望ましい。しかし、私はDjangoのドキュメントで、[comma separated field](https://docs.djangoproject.com/ja/1.10/ref/models/fields/#commaseparatedintegerfield)について知りました。私のエンジンがいつも復帰してから操作しやすくなりましたちょうど5本の映画。 – Alex

+0

リレーショナル・スキーマの正規化については、このトピックのかなりの部分があります。 –

0

私は今、だから私は、多くの多の関係持っ

class Recommendation(models.Model): 
    user = models.ForeignKey(User) 
    topmovies = models.ManyToManyField(Movie) 

私の「Models.py」を変更した|勧告| < => |ムービー| 後でこの推奨表を満たすようにエンジンを修正します。一方

、私がリクエストを処理する方法あなたがお勧めか、推奨テーブルがアップを満たされていると仮定すると?

urlpatterns = [ 
       ...., 
       url(regex, someView), 
      ] 

が、私が実際に推奨される映画のリストを取得するためのリクエストに掲載のuser_idを使用する方法については失われています:私は私のようなものを追加する必要があります知っているurls.pyで 。

+0

あなたはdjangoチュートリアルをやったことがありますか? –