2016-09-16 8 views
0

私はモデルからの情報を取得しようとしているではなく、URLを移動せずにPKを示すことなく、同じウェブで情報を取得、私がアクセスしたとき、私は自分で説明しましょう。例:DjangoはURL

/リスト それは情報を表示し、私はちょうどそこに私はこのユーザーの完全な情報、または書籍や何かにアクセスすることができます詳細にURLを変更/ 8/

情報を表示する方法はありますか? URLにデータベースのIDを表示しますか?例えば、リスト/

ため

私はいくつかのコードを持っていませんが、私には、私はあなたたちは私を助けることを願って、それを行うにはどのように任意のアイデアを持っているdは。

のURL:

url(r'^detalle/(?P<pk>[0-9]+)/$', views.detalle_id, name="detalle_id"), 
url(r'^detalle/(?P<nombre>.*)/$', views.detalle_nombre), 

ビュー:

def detalle_id(request, pk): 
    detalle = Pregunta.objects.get(pk=pk) 
    Pregunta.objects.filter(id=pk).update(comentario='1') 

    return render(request, 'detalle.html', {'detalle': detalle}) 


def detalle_nombre(request, nombre): 
    detalle = Pregunta.objects.get(nombre=nombre) 
    return render(request, 'detalle.html', {'detalle': detalle}) 

def lista(request): 
    listadb = Pregunta.objects.all() 
    return render(request, 'lista.html', {'listadb':listadb}) 

編集:コメントから:

私は、クライアントのデータベースを作成しようとしていますので、その理由がある

データベースを使用するユーザーはデータベースの一部にアクセスできますが、すべてのデータベースにアクセスすることはできません。そのため、たとえばdomain.com/89に設定されたユーザーが情報を参照するとクライアント89号を編集したり編集したりすることができます。これは私がこれのようにしようとしている理由がたくさんあります。私のことを信じるためにはクリックに関する情報を得る必要があるが、クリックするだけでURLを変更せずにアクセスする必要がある。出来ますか ?

+0

idsの代わりにスラッグを使用することができます – arcegk

+0

答えarcegkありがとう、よく問題は私はきれいなURLを持っている必要があります、URLを変更せずにクリックして本の情報を表示する方法はありますか? –

+0

なぜユニフォームリソース識別子を使用したくないのですか?電話番号のない電話網は何が良いですか? – allcaps

答えて

2

権限のないアクセスを阻止するためにデータベース内の各書籍または他のアイテムに「推測できない」URLを作成しようとすると、間違ったトラックにいることになります。推測不能なURLは推測できますが、推測することはできません。また、閲覧または編集すべきでないURLを編集します。

少なくとも、ユーザーが認証されているかどうかを確認する必要があります。

if request.user.is_authenticated(): 

ただし、これはユーザーがログインしているか匿名ユーザーかを示します。ユーザーが編集権限を持っているかどうかを調べるには、モデルに情報を追加する必要があります。

class Pregunta(models.Model): 
    .... 
    owner = models.ForiegnKey(User) 

次に、オーナーシップが正しいかどうかを調べるための追加テストを行います。あなたはナメクジを使用しない場合

推測できないURLを取り戻す、あなたが非連続的な主キーを使用することができます:あなたはどのように多くのユーザーに公開したくない場合はhttps://stackoverflow.com/a/37605582/267540

これは便利ですアイテムがデータベースに存在し、どのアイテムが最初に来たのかを示します。