2022年8月12日金曜日

Django 覚書

 Djangoの参考書も読んだが、それだけでは実際のシステムを作り上げる際にいろいろな壁にぶつかってしまう。結局、ネットで情報を仕入れたり、工夫しながらやっていくしかない。最近、いくつかきづいたことをまとめてみた。

・メール送信は、必ずしもサードパーティがいいとも限らない。2,3試したがどれも、自分の環境ではうまくいかず、結局、Djangoの基本機能を利用してうまくいった。(フォームメールなども含めて、そのほうがいいようだ)前回の投稿参照のこと

・画像ファイルのアップロードも、圧縮したい。これは、stdimageためしたが、うまくいかない。Djangoのクラスをうまく継承している、imagekitをためしてようやくうまくいった。

 Imageモデルを作成して、それをViewの中で通常の使い方ができる。くせがない感じだ。

 image=Image.objects.all().filter(taken_by=profile_id).first()のように

マッチングサイトの足あと機能は、こんな感じでmap活用してなんとかクリア

class FootprintListView(LoginRequiredMixin,ListView):    
       template_name="accounts/footprint_list.html" 
       paginate_by=4       
       def get_queryset(self):         #なぜか、これを入れないとエラー、このへんが
                    return uquery(self,"" )      #まだ 勉強不足
       def get_context_data(self):
          context = super().get_context_data()
          flist = Footprint.objects.filter(looked=self.request.user) 
          #object_list=uquery(self,"" )
          iobList=map( lambda ob: {'usr':ob.look
                                   ,'img':Image.objects.all().filter(taken_by=ob.look.id).first()
                                   ,'footprintThanksSend':Footprint.objects.all().filter(look=ob.look,looked=self.request.user ).first()
                                     }  ,flist)   
          context['iobject_list']=iobList
          context['cuser']=self.request.user
          context['count']=len(list(iobList))
          return context
・「足あとありがとう」(自分のプロファイル見てくれてありがとう)の機能は、意外と基本的なところで、つまづく。①~③のところは、どうということのないところだが、これを思いつくまでだいぶ時間がかかった。画面のフォームを通して、値を入れていくコード例はたくさんあるが、このように、直接値を入れることは少ないので。

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def footprint_thanks(request,profile_id):
    if request.method == 'GET':           
       thanks_from = request.user.id  # miraretahito 
       thanks_to=User.objects.filter(id=profile_id)[0] #gazo mitahito
       obj=Footprint.objects.filter(look=thanks_to).first() ①
       obj.thanks=True ②
       obj.save()  ③
       return render(request, 'accounts/footprint_thanks.html', {'thanks_to':obj.look})

0 件のコメント:

コメントを投稿