DjangoでTODOリストを作ってみた

# 初めに　概要
この前twitterのBOTを作ったのですが、APIが4月で終わってしまうということで、全く意味のないものと化してしまいました。残念
作成してからはしばらくatcoderをやっていたのですが、
何か別の物も作成してみようと思い、初心者らしくTODOリストを作ってみました

CRUD機能を汎用ビューで実装します

# 使ったもの
・Python 3.10.7
・Django 4.2
・HTML
・CSS

# アプリの様子

ログアウトとログイン↓
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/a93fb69b-e9d4-d299-93d4-444c3a54a4a8.gif)

タスクの追加と削除
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/c3e4653a-72d8-aa0d-f551-31ac8bed7eaa.gif)

タスクの編集と完了済みにする操作
![ezgif.com-video-to-gif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/2f378504-fcaa-50e2-1ca0-e78c4d69940f.gif)

# Github

https://github.com/jefuo/Todo-Django

# 作りながらの改良

### タスクを追加、編集する時、写真のように特定のユーザーでログインしているのにもかかわらず何故か再度ユーザーを選ばされるという仕様になっている。
解決できないか、、、

![スクリーンショット (61).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/89257eb9-f887-885a-abe0-29ccec1f27e5.png)

form_valid()関数を使うと良いらしい
使い方はよく分からないので、とりあえず公式ドキュメントの通り実装。

```py
class TaskUpdate(LoginRequiredMixin,UpdateView):
    model = Task
    #ユーザーの項目はいらないので"__all__"から下記に戻す
    fields = ["title","description","completed"]#"user"を消す
    success_url = reverse_lazy("tasks")
    
    def form_valid(self,form):
        form.instance.user = self.request.user 
        #ユーザーはログインしているユーザーにする
        return super().form_valid(form)
```
結果
![スクリーンショット (70).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/44aa41ff-62aa-3621-e1ee-d12e93386ae2.png)
出来た　ちゃんとユーザーの項目が消えて、ログインしているユーザーに設定されている

### パスワードを忘れた際の再設定メールを送れないか
ログイン画面によくある、忘れた際の再設定メール送信の機能を追加してみようと思う

https://blog.narito.ninja/detail/44

https://qiita.com/t-iguchi/items/4c76a10458786e115ce3

これらの記事のコードを自分用に変更して・・・

![スクリーンショット (71).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/dce5071a-1abc-c802-2745-b8b0d7f7013e.png)

↓![スクリーンショット (75).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/2f7d0e87-7323-0d5f-06f3-b52cdf3bedb6.png)

↓
![スクリーンショット (73).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849641/51abcd02-cb05-9655-9ce1-35072271bc26.png)

実装できました。今はURLに直接 password_resetと打ち込まないといけないので
遷移するためのボタンはこれから作ろうと思います

発生したエラーの解決方法自分で記事にしました↓備忘録

https://qiita.com/jefuo/items/c8e2ab2d2c782cf359f9

# 参考にしたサイト
・qiitaの記事

https://qiita.com/acecrc/items/a4302ca6cf0897c45302

https://qiita.com/tsubasa2345/items/140e6b95638ad58a1999

https://qiita.com/akane_tama/items/4ac9100c0948d81d46d6

など
・公式ドキュメント
・　

https://tech-diary.net/django-todo-tutorial/#index_id40

https://blog.narito.ninja/detail/44

https://qiita.com/t-iguchi/items/4c76a10458786e115ce3

など

# エラーなどの解決備忘録
### 仮想環境の有効化の際、権限不足でエラーになる場合

https://rainbow-engine.com/ps-script-execution-disabled/#title1

### vscodeを立ち上げ直した場合、もう一度仮想環境に入りなおす

vscodeを立ち上げ直した場合、
```py
cd ..
```
で一個前の階層に戻り　
```py
Scripts\activate
```
で仮想環境にアクセス
### from django.urls import pathの波線エラー

https://3pysci.com/vscode-2/ 

https://amateur-engineer-blog.com/vscode-settingsjson/

### python djangoプロジェクトのurls.pyでincludeを使ってアプリケーションのurls.pyを呼び出そうとした時のエラー

includeもインポートする
```py
from django.urls import path,include
```
### Djangoでメールが送られてこないのを解決 SMTPAuthenticationError

https://qiita.com/jefuo/items/c8e2ab2d2c782cf359f9


# これからの改善案

パスワードを忘れた際にパスワード再設定メールを送る機能の実装を頑張ってみようと思います