djangoの@cached_property
今日は修正前に作った検索インタフェースですが、haystackを使っていますが、リクエストパラメータと応答データフォーマットを修正する必要があるので、長い間デバッグしていましたが、問題はこうです.良いアイデアがあればメッセージを残してください.
haystackのデフォルトのリクエストインタフェースは
私が設計したインタフェース
私たちのプロジェクトは検索のすべてとタイプの検索に分かれているので、デフォルトのインタフェースが露出しているので、私が設計した短い練習は少しできましたが、どのように実現するか、ソースコードを見て、私は第1版を実現しました.
しかし問題が来て、複数のmodel検索はどのように実現しますか?私はどうせまずひょうたんでひょうたんを描くのです.
結果は次のとおりです.
正しいのは次のようなことです.
モデルに必要なのはリストだったが、これはやりやすい.
このような状況が発生しました.
リストネスト?どうしようかな?俺の頭の良さを続けろ
acc?何の鬼がこの時のmodelsがまだリストネストを形成していないのか、上で定義したリストなのか、つまり私たちの操作がネストされる前に、どのように解決されたのかを説明しています.ではDjangoリクエストの完全なプロセスを見て、いつこれを操作したか見てみましょう...
結果
djangoソース:WSGIRequestでGETがこのquery_を操作しましたstring、ソースコードはこうです.
このQueryDictはパスの「xxx」を要求します.xxxx&xx.xxxxx&xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
それならやりやすい
順調に解決します!!!DjangoソースコードのGETメソッドにデコレーション@cached_property、これは何ですか?
これはどのようにcachedの役割を果たしますか?キャッシュはredisやmongodyというデータベースを使っているのではないでしょうか.もしあなたが長い間開発に従事していたら、ぜひこれを見てください.かつて私も文章を書いたことがありますが、今日出して、必要なものがあれば注文してください.https://segmentfault.com/a/11...
haystackのデフォルトのリクエストインタフェースは
.../search?q= &models=xxxx.xxxx&models=xxxx.xxxx
私が設計したインタフェース
.../search?q= &f=
私たちのプロジェクトは検索のすべてとタイプの検索に分かれているので、デフォルトのインタフェースが露出しているので、私が設計した短い練習は少しできましたが、どのように実現するか、ソースコードを見て、私は第1版を実現しました.
class KaokaoSearchView(SearchView):
def __call__(self, request):
type = int(request.GET.get('f', 0))
models = {
0: 'xxx.xxxxx',
1: 'xx.xxxxx',
2: 'xxxxxx.xxxxxxxxx'
}
data = request.GET
_mutable = data._mutable
data._mutable = True
data['models'] = models.get(type, '')
data._mutable = _mutable
self.request = request
しかし問題が来て、複数のmodel検索はどのように実現しますか?私はどうせまずひょうたんでひょうたんを描くのです.
models = {
0: 'xxx.xxxxx',
1: 'xx.xxxxx',
2: 'xxxxxx.xxxxxxxxx',
9: 'xxx.xxxx&xx.xxxxx&xxxxxx.xxxxxxxxx'
}
結果は次のとおりです.
正しいのは次のようなことです.
モデルに必要なのはリストだったが、これはやりやすい.
models = {
0: 'xxx.xxxxx',
1: 'xx.xxxxx',
2: 'xxxxxx.xxxxxxxxx',
9: ['xxx.xxxx', 'xx.xxxxx', 'xxxxxx.xxxxxxxxx']
}
このような状況が発生しました.
リストネスト?どうしようかな?俺の頭の良さを続けろ
data['models'] = models.get(type, '')
data['models'] = data['models'][0][1] + data['models'][0][1] + data['models'][0][2]
acc?何の鬼がこの時のmodelsがまだリストネストを形成していないのか、上で定義したリストなのか、つまり私たちの操作がネストされる前に、どのように解決されたのかを説明しています.ではDjangoリクエストの完全なプロセスを見て、いつこれを操作したか見てみましょう...
結果
djangoソース:WSGIRequestでGETがこのquery_を操作しましたstring、ソースコードはこうです.
class WSGIRequest(http.HttpRequest):
def __init__(self, environ):
...
@cached_property
def GET(self):
# The WSGI spec says 'QUERY_STRING' may be absent.
raw_query_string = get_bytes_from_wsgi(self.environ, 'QUERY_STRING', '')
return http.QueryDict(raw_query_string, encoding=self._encoding)
このQueryDictはパスの「xxx」を要求します.xxxx&xx.xxxxx&xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
それならやりやすい
models = {
0: 'models=xxx.xxxxx',
1: 'models=xx.xxxxx',
2: 'models=xxxxxx.xxxxxxxxx',
9: 'models=xxx.xxxx&models=xx.xxxxx&models=xxxxxx.xxxxxxxxx'
}
data = request.GET
_mutable = data._mutable
data._mutable = True
data['models'] = http.QueryDict(models.get(type, ''))
data._mutable = _mutable
self.request = request
順調に解決します!!!DjangoソースコードのGETメソッドにデコレーション@cached_property、これは何ですか?
#
class cached_property(object):
"""
Decorator that converts a method with a single self argument into a
property cached on the instance.
Optional ``name`` argument allows you to make cached properties of other
methods. (e.g. url = cached_property(get_absolute_url, name='url') )
"""
def __init__(self, func, name=None):
self.func = func
self.__doc__ = getattr(func, '__doc__')
self.name = name or func.__name__
def __get__(self, instance, cls=None):
if instance is None:
return self
res = instance.__dict__[self.name] = self.func(instance)
return res
これはどのようにcachedの役割を果たしますか?キャッシュはredisやmongodyというデータベースを使っているのではないでしょうか.もしあなたが長い間開発に従事していたら、ぜひこれを見てください.かつて私も文章を書いたことがありますが、今日出して、必要なものがあれば注文してください.https://segmentfault.com/a/11...