自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

  • Django(DRF)+ReactのSPAでJWTを使った認証を実装する

    この構成の場合、Djangoのデフォルトの認証機能でも実現はできるが、SPAのコンセプトが台無しになるため、JWTを使う。 JWT とは? JSON Web Token の略である。 JWTとは、認証情報や権限を含んだ文字列(トークン)のこと。JSON形式で送受信される。 参照: https://ja.wikipedia.org/wiki/JSON_Web_Token クライアント側が、ログイン用のユーザー名とパスワードを入力 サーバーがその検証をする。検証の結果、問題なければトークンを生成、これがJWTである。 レスポンスと ...
  • Django Rest FrameworkのViewの書き方【APIViewと汎用APIView、ModelViewSetの違い】

    Django Rest Framework (以下、DRF)のビューの書き方をまとめる。 下記記事で紹介した素のDjangoのビューと同様、DRFでも継承するビューによって大きく書き方が全く違う。 【関連記事】 : 【Django】ビュー関数とビュークラスの違い、一覧と使い方 本記事では、状況に応じて、適切なビューがコーディングできるようビューの書き方をまとめる。 前提 モデル from django.db import models class Topic(models.Model): comment = models.CharField(verbose_nam ...
  • 【Restful】Django+Reactビギナーが40分でCRUD掲示板アプリ(SPA)を作る方法【FetchAPI】

    本記事は、【Restful】Django+Reactビギナーが40分で掲示板アプリ(SPA)を作る方法【axios】のFetchAPI版である。 axiosを別途インストールせず、FetchAPIを使っている。 流れ React、Djangoの各プロジェクトを作る Djangoの必要なライブラリをインストール Djangoのsettings.pyの編集 Djangoのmodels.pyの編集 Djangoのse ...
  • よく出るReactのエラー一覧

    textarea要素には、valueプロパティを使って値を与える 普通のHTMLでは、textareaに最初から値を入れておきたい場合、子要素に直接文字を書くと良い。 しかし、Reactで同じことをやるとエラーになる。 <textarea className="form-control" name="comment" onChange={this.handleChange}>{this.state.activeItem.comment}</textarea> そこで、valueプロパティを使う。 <textarea className="form-control" name="comment" onChange={this.handleChange} value={this.state.activeItem.comment}></textarea> これで、 Use the `defaultValue` or `value` props instead of setting children on <textarea>. というエラーは解決される。 リスト内の要素を識別できるよう、keyプロパティを与える Each child in a list should have a unique ...
  • 【Vim】ReactでHTMLをコーディングするときだけ改行でインデントしてほしい

    ReactをVimでコーディングしているとき、不自由だと感じることが多々ある。 その1つが、.jsxファイルのHTML部をコーディングしているとき、改行でインデントしてくれないこと。 例えば、下記のコードのHTMLで改行をしても、HTML形式でインデントをしてくれない。 return ( <> <textarea id="textarea" className="form-control"></textarea> <input onClick={ addTopic } type="button" value="送信" /> {topics.map( (topic,i) => ( <div className="border" key={i}> <div> { topic } </div> <div className="text-right"> <input onClick={ deleteTopic } className="btn btn-danger" type="button" value="削除 ...
  • GitHubからクローンしたReactを動作させる方法

    Reactのgitignoreには、node_modulesが含まれている。 そのため、クローンしたReactのプロジェクトを動かすには、 npm installを前もって実行しておく必要がある。 git clone https://github.com/seiya0723/startup-react cd startup-react npm install npm start ...
  • DjangoとReactのSPAウェブアプリで、使用することができない(と思われる)Djangoの技術

    Djangoで開発を進めていき、途中でReactのSPAを考える場合。 一部のDjangoの技術が使用できない。 本記事ではDjango+ReactのSPAを作る際、使用できない(もしくは使用できないと思われる)Djangoの技術をまとめる。 Django Template Language 当然だが、Reactがレンダリングを行うため、DjangoTemplateLanguageは使えなくなる。 ifやforはJavaScriptに含まれるため問 ...
  • 【Restful】Django+Reactビギナーが40分で掲示板アプリ(SPA)を作る方法【axios】

    『Djangoビギナーが40分で掲示板アプリを作る方法 』を終え、DjangoとReactを組み合わせ、SPAを作りたいと思った方向け。 40分はあくまでも目安。 内部構造に関しては、『DjangoとReactを組み合わせる方法論と問題の考察 』に解説がある。 2023年5月3日現在、編集機能の実装を考慮中。近日追記予定。 2024年4月30日追記。モーダルダイアログを使用して編集機能を搭載。 流れ React、 ...
  • DjangoとReactのTodoアプリ(SPA)を解析する

    DjangoとReactを組み合わせる方法論と問題の考察の続き。 コードを書いてみたので、それを元にわかった事をまとめていく。間違いが有るかもしれないので、ご注意をば。 動作原理と全体像は↑の記事で解説しているので、本記事では割愛。コードの意味をまとめていく。 サーバーサイド(Django) config/setttings.py 編集した箇所のみ掲載 INSTALLED_APPS = [ "todo", 'corsheaders', 'rest_framework', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware', ] CORS_ORIGIN_WHITELIST = [ 'http://localhost:3000' ] アプリ、django-cors- ...
  • react-route-domの使い方【Reactでルーティング】

    ページが複数あるサイトをReactで作る場合、react-route-domでルーティングを行うと良いだろう。 npm install react-route-dom 使い方 コンポーネントを作る src/components/に以下ファイルを配置。 Home.jsx Portfolio.jsx Profile.jsx Home.jsx import { Link } from "react-router-dom"; export const Home = () => { return ( <> <div>ここはホームです</div> <Link to={`/portfolio`}>ポートフォリオ</Link> <Link to={`/pro ...