본문 바로가기

TIL

(99)
Django 서로 다른 필드 값 합치기 patients = Patient.objects.annotate(full_name=Concat(F('name__family'),F('name__name'),output_field=CharField())).filter(full_name__icontains=name) annotate로 full_name이라는 새 필드를 추가 full_name = Concat 함수로 name_family 필드의 값과 name_name 필드의 값을 합친 문자열을 가지는 필드 + Value()를 사용하면 합치는 기준을 주는 것도 가능
React JWT로 로그인 구현 import axios from "axios";import { API_ENDPOINT } from "./server";import Cookies from "js-cookie";const instance = axios.create({ baseURL: API_ENDPOINT, headers: { "Content-type": "application/json" },});// 인터셉터를 사용하여 요청에 토큰을 추가instance.interceptors.request.use( config => { const token = Cookies.get("access"); if (token) { config.headers['Authorization'] = `Bear..
React access 토큰 디코딩 access 토큰 디코딩해서 userId 얻기 import base64 from 'base-64';export const getUserId = (token) => { try { if (!token) { throw new Error('Token is undefined or empty'); } const payload = token.substring(token.indexOf('.') + 1, token.lastIndexOf('.')); const decodingInfo = base64.decode(payload); const decodingInfoJson = JSON.parse(decodingInfo); re..
Js 객체 <-> JSON 문자열 변환 stringify(): 자바스크립트 객체 -> JSON 문자열로 변환. 네트워크를 통해 객체를 JSON 문자열로 변환할 때 주로 사용console.log(JSON.strignify({x: 5, y: 6}))// Expected output: "{"x":5, "y":6}"  parse(): JSON 문자열 -> 자바스크립트 객체로 변환. 네트워크 통신의 결과를 통해 받아온 JSON 문자열을 JS 객체로 변환할 때 사용const json = '{"result":true, "count":42}';const obj = JSON.parse(json);console.log(obj.count)// Expected output: 42  JSONPlaceholder가짜 서버(fake server)
React Dynamic Route Dynamic Route란, path에 유동적인 값을 넣어서 특정 페이지로 이동하게끔 구현하는 방법을 말한다.useParams를 사용하면 된다. 바로 적용해보았다. 우리 프로젝트에서 이 Dynamic Route를 사용해 department 별 페이지를 이동하게끔 구현했다.  Header.jsx {Array.isArray(departmentList) && departmentList.map(department => ( {department.department_name} ))} router.jsx} />  Department.jsximport React, { useEffect, useState } from 'react';import { useParam..
React Router Dom yarn add react-router-dom 1. 페이지 컴포넌트 작성 -> 다중 페이지2. Router.js 파일 생성. router를 구성하는 설정 코드 작성3. App.jsx import 하고 2번 적용 : 주입4. 페이지 이동 # Router.jsimport { BrowserRouter, Route, Routes } from "react-router-dom";import About from "../pages/About";import Home from "../pages/Home";import Works from "../pages/Works";import Contact from "../pages/Contact";const Router = () => { return ( ..
[DRF] Nested Serializer class AccountSiginAPIView(APIView): def post(self, request): account_serializer = AccountSerializer(data=request.data) if account_serializer.is_valid(raise_exception=True): subject = account_serializer.validated_data["subject"] if subject == "Patient": patient_serializer = PatientSerializer(data=request.data) if patient_seriali..
[Python] 웹 크롤링 / trafilatura https://trafilatura.readthedocs.io/en/latest/ Trafilatura는 웹 페이지에서 텍스트를 추출하기 위해 만들어진 크롤링 라이브러리로 웹 페이지에서 데이터 추출이나 텍스트마이닝을 쉽게 해주는 툴이다.HTML 문서를 처리하여 본문과 제목 등의 중요한 텍스트 요소를 추출하는 기능을 제공한다. trafilatura 를 이용하면 크롤러 구현은 매우 쉽다.텍스트만 추출할 계획이므로 불필요한 정보들은 추출하지 않도록 파라미터를 조정하고 json 으로 내보낸뒤 text 필드만 가져오면 된다.import jsonimport trafilaturadef crawl(url): downloaded = trafilatura.fetch_url(url) contents = trafi..
Django Test code 지금까지 API 테스트는 Postman을 통해 진행했었다.Test 코드를 작성하면 한줄의 명령으로 모든 테스트 케이스를 한번에 처리할 수 있다APITestCase 사용하기drf의 APITestCase를 상속받아서 클래스로 test 케이스를 만들 수 있다.# tests.pyfrom rest_framework.test import APITestCasefrom rest_framework.views import statusfrom django.shortcuts import resolve_urlfrom django.urls import reversefrom ..models import *class TestCode(APITestCase): def setUp(self): self.url_1 = '/..
DRF JWT로 로그아웃 기능 넣기 # settings.pyINSTALLED_APPS = [ 'rest_framework_simplejwt.token_blacklist',]settings.py에서 INSTALLED_APPS에 토큰 블랙리스트 추가 이후 migrate 한번 해줘야함 # urls.pyfrom django.urls import pathfrom rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView, TokenBlacklistView,)urlpatterns = [ path("login/", TokenObtainPairView.as_view(), name="token_obtain_pair"), path('logout/..