<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기술, 정보 노트</title>
    <link>https://bthinkr.tistory.com/</link>
    <description>IoT, Cloud, 파이썬, 장고, Data, 블로그, 재테크 등의 간단한 IT 팁을 포함한 인터넷 정보, 기술 공부, 일상 블로그</description>
    <language>ko</language>
    <pubDate>Thu, 28 May 2026 10:53:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>키블럭</managingEditor>
    <image>
      <title>기술, 정보 노트</title>
      <url>https://t1.daumcdn.net/cfile/tistory/230A4D475355E8C11A</url>
      <link>https://bthinkr.tistory.com</link>
    </image>
    <item>
      <title>c 코딩 - static 전역변수 의미</title>
      <link>https://bthinkr.tistory.com/512</link>
      <description>&lt;p&gt;&lt;code&gt;static&lt;/code&gt;을 주는 것과 안 주는 전역 변수에는 중요한 차이가 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;1. &lt;strong&gt;static 전역 변수&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파일(translation unit) 내부에서만 접근 가능&lt;/strong&gt;합니다.&lt;/li&gt;
&lt;li&gt;다른 소스 파일에서 &lt;code&gt;extern&lt;/code&gt;으로 참조할 수 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;링크 시 심볼 충돌이 발생하지 않습니다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;캡슐화&lt;/strong&gt; 효과가 있어, 해당 파일 내부에서만 사용하는 전역 변수에 적합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;예시:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;static int counter = 0; // 이 파일에서만 사용 가능&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;2. &lt;strong&gt;static이 없는 전역 변수&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;프로그램 전체(모든 소스 파일)에서 접근 가능&lt;/strong&gt;합니다.&lt;/li&gt;
&lt;li&gt;다른 파일에서 &lt;code&gt;extern&lt;/code&gt;으로 선언해서 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;여러 파일에서 같은 이름의 전역 변수가 있으면 &lt;strong&gt;링커 에러&lt;/strong&gt;가 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;예시:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c&quot;&gt;int counter = 0; // 다른 파일에서 extern int counter;로 접근 가능&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;3. &lt;strong&gt;정리&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;static&lt;/strong&gt;: 파일 내부 전용(외부 접근 불가, 캡슐화)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;static 없음&lt;/strong&gt;: 프로젝트 전체에서 접근 가능(외부 접근 허용)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;권장:&lt;/strong&gt;  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;외부에서 접근할 필요 없는 전역 변수는 항상 &lt;code&gt;static&lt;/code&gt;을 붙여서 파일 내부로 한정하는 것이 좋습니다.  &lt;/li&gt;
&lt;li&gt;외부에서 접근해야 한다면 &lt;code&gt;extern&lt;/code&gt;과 함께 사용하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt;&lt;br&gt;&lt;code&gt;static&lt;/code&gt;을 붙이면 &lt;strong&gt;파일 내부 전용 전역 변수&lt;/strong&gt;가 됩니다.&lt;br&gt;안 붙이면 &lt;strong&gt;프로그램 전체에서 접근 가능한 전역 변수&lt;/strong&gt;가 됩니다.&lt;/p&gt;</description>
      <category>Tech</category>
      <category>c</category>
      <category>static</category>
      <category>시스템</category>
      <category>임베디드</category>
      <category>전역변수</category>
      <category>코딩</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/512</guid>
      <comments>https://bthinkr.tistory.com/512#entry512comment</comments>
      <pubDate>Tue, 4 Nov 2025 09:43:24 +0900</pubDate>
    </item>
    <item>
      <title>토렌트 다운로드 qBittorrent 설정 사용법 - 2022-09-15</title>
      <link>https://bthinkr.tistory.com/490</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;토렌트 사이트를 최신 접속이 되는 곳으로 몇개 추천하고, 실제 토렌트 다운로드 방법을 공유하는 페이지 입니다. 추천 토렌트 사이트 순위를 소개하는 것 뿐만 아니라 토렌트 프로그램의 설치 부터, 토렌트 추천 사이트 방문 그리고 실제 토렌트 파일로 다운로드 하는 과정 전부를 진행해 보려 합니다. 먼저, 인기 영화 드라마, 넷플릭스, 최신 영화 토렌트 파일을 제공해 주는 추천토렌트 사이트를 몇개 살펴 봅시다.&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 토렌트 다운로드 프로그램 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 토렌트 사이트를 찾았으면 다운로드를 수행해야 한다. 다운로드 프로그램을 먼저 설치하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 것은 uTorrent 와 qBittorrent 2가지 정도가 된다.&amp;nbsp;나는 그냥 오픈소스인 큐빗토렌트가 편하다. 이걸로 설명한다.&amp;nbsp;다운로드 사이트는 여기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;https://www.qbittorrent.org/download.php&quot;&gt;https://www.qbittorrent.org/download.php&lt;/a&gt; -&amp;nbsp;&lt;b&gt;Current stable version: qBittorrent v4.4.3.1 버전&lt;/b&gt;으로 installer 를 다운로드 받아서 설치하면 된다.&amp;nbsp;설치 방법은 특별한 것이 없고, 그냥 Next 버튼만 쭉 누른다.&amp;nbsp;자세한 설치 방법을 혹시나 보고 싶다면 여기 링크에 들어가서 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt; &lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;a href=&quot;https://wiznxt.tistory.com/778&quot;&gt;큐빗토렌트 qBittorrent 설치와 사용법 - 필수 토렌트 다운로드 프로그램&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 설치후에 설정하는 것이 몇가지 있다. 꼭 해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 &amp;gt; 연결 &amp;gt; 수신포트 부분에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무작위로 포트를 선택하도록 하고 아래에 있는 &lt;b&gt;UPnp/ NAT-PMP 포트 전환 사용을 체크해주자&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wmwAR/btrGJ8ciuTo/cTvRyYlkL7RCvLme00FZJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wmwAR/btrGJ8ciuTo/cTvRyYlkL7RCvLme00FZJ1/img.png&quot; data-alt=&quot;수신 포트 upnp 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wmwAR/btrGJ8ciuTo/cTvRyYlkL7RCvLme00FZJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwmwAR%2FbtrGJ8ciuTo%2FcTvRyYlkL7RCvLme00FZJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;785&quot; height=&quot;624&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수신 포트 upnp 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고,&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설정 &amp;gt; 비트토렌트 &amp;gt; 개인 정보 부분에서 아래와 같이 익명 모드 사용 체크&lt;/b&gt;를 하고, 암호화 모드는 암호화 허용 옵션을 꼭 선택하도록 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byXMdj/btrGLCXL7oN/2RIGhSABDQywthg3o0bUN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byXMdj/btrGLCXL7oN/2RIGhSABDQywthg3o0bUN0/img.png&quot; data-alt=&quot;익명 모드 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byXMdj/btrGLCXL7oN/2RIGhSABDQywthg3o0bUN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyXMdj%2FbtrGLCXL7oN%2F2RIGhSABDQywthg3o0bUN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;781&quot; height=&quot;623&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;익명 모드 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머 이렇게 한다고 해서, 모든 보안이나 익명성이 지켜지지 않겠지만 기본적으로 설정해 두는 것이 낫다.&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 토렌트 다운로드 가이드 - qBittorrent, 주주토렌트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 qBittorrent 나 uTorrent 같은 토렌트 프로그램 설치가 완료 되었다면 이제 실제 토렌트 다운로드를 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 추천 토렌트 사이트에서 맘에 드는 곳을 방문한다. 토렌트 사이트를 더 보고 싶다면, 아래 링크를 방문하자&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://ts.devbj.com/371&quot;&gt;토렌트 사이트 추천 순위 및 URL 공유합니다 (https://ts.devbj.com/371)&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중에서 나는 주주토렌트 사이트로 (토렌트리 계열 사이트)로 들어가 본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvAXf7/btrGJ7EsSRZ/fKXlch3BkWKUFq9qI94cV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvAXf7/btrGJ7EsSRZ/fKXlch3BkWKUFq9qI94cV0/img.png&quot; data-alt=&quot;주주토렌트 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvAXf7/btrGJ7EsSRZ/fKXlch3BkWKUFq9qI94cV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvAXf7%2FbtrGJ7EsSRZ%2FfKXlch3BkWKUFq9qI94cV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1360&quot; height=&quot;922&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주주토렌트 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 사이트에 접속하면 인기영화 화면이 나열되어 있다. 여기서 토렌트 다운로드를 원하는 영화를 클릭해 본다. 그럼 다음과 같은 창이 나타난다.&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 .torrent file 을 다운로드 한 다음, 컴퓨터에서 파일을 더블 클릭해도 되지만 가장 쉽게는 magnet link를 클릭하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 화면 처럼 마그넷 링크를 클릭해 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/babclN/btrGKvLVSYC/Z1TVsaCa6lAPhdeIIFIOK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/babclN/btrGKvLVSYC/Z1TVsaCa6lAPhdeIIFIOK1/img.png&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;682&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.8535%; margin-right: 10px;&quot; data-widthpercent=&quot;43.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/babclN/btrGKvLVSYC/Z1TVsaCa6lAPhdeIIFIOK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbabclN%2FbtrGKvLVSYC%2FZ1TVsaCa6lAPhdeIIFIOK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1360&quot; height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpKnqf/btrGKHywJWL/hTFKWeZatPi2eFSNIM2HS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpKnqf/btrGKHywJWL/hTFKWeZatPi2eFSNIM2HS0/img.png&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;195&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;56.64&quot; style=&quot;width: 55.9837%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpKnqf/btrGKHywJWL/hTFKWeZatPi2eFSNIM2HS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpKnqf%2FbtrGKHywJWL%2FhTFKWeZatPi2eFSNIM2HS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;큐빗토렌트 자동 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 토렌트 프로그램이 설치되어 있고, 파일이 정상이라면 아래와 같이 qBittorrent 프로그램이 바로 실행되어 창이 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 파일 이름을 확인하고, 그냥 확인 버튼만 누르면 바로 다운로드가 시작된다.&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M2diK/btrGLBEy5Sg/NOKoJd9PuCkewolmtInna1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M2diK/btrGLBEy5Sg/NOKoJd9PuCkewolmtInna1/img.png&quot; data-alt=&quot;토렌트 다운로드 시작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M2diK/btrGLBEy5Sg/NOKoJd9PuCkewolmtInna1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM2diK%2FbtrGLBEy5Sg%2FNOKoJd9PuCkewolmtInna1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;699&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;699&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토렌트 다운로드 시작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 토렌트 다운로드가 시작된다. 아래와 같이 진행율을 확인하면 된다. 진행율이 올라가지 않으면 그냥 포기하고 파일을 삭제하도록 한다. 오래된 토렌트 파일의 경우 다운로드가 불가능한 경우도 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7Xz4x/btrGL9ulMJg/kkwR5W3OEfyA6MZrOKrrw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7Xz4x/btrGL9ulMJg/kkwR5W3OEfyA6MZrOKrrw0/img.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;766&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7Xz4x/btrGL9ulMJg/kkwR5W3OEfyA6MZrOKrrw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7Xz4x%2FbtrGL9ulMJg%2FkkwR5W3OEfyA6MZrOKrrw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1217&quot; height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNZCiZ/btrGJGHstyh/TgtRDdaiWiR6sQzZyIOf00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNZCiZ/btrGJGHstyh/TgtRDdaiWiR6sQzZyIOf00/img.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;766&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNZCiZ/btrGJGHstyh/TgtRDdaiWiR6sQzZyIOf00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNZCiZ%2FbtrGJGHstyh%2FTgtRDdaiWiR6sQzZyIOf00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1217&quot; height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;토렌트 다운로드 진행중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 없다면, 아래와 같이 100% 배포중으로 파일 상태가 바뀌면 토렌트 다운로드가 완료된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 파일을 즐기면 된다. 시드를 유지해 주면 동일하게 업로드 하는 것이 되므로 일정 시간 이후에는 이 토렌트 파일이나 마그넷 링크 정보를 삭제하는 것이 좋다. 클릭한 다음 휴지통 아이콘을 누르면 다음과 같은 창이 나타난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yr6xB/btrGIZAuWkN/kshSUVluKN52YKQhpDWSl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yr6xB/btrGIZAuWkN/kshSUVluKN52YKQhpDWSl0/img.png&quot; data-alt=&quot;토렌트 파일 삭제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yr6xB/btrGIZAuWkN/kshSUVluKN52YKQhpDWSl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYr6xB%2FbtrGIZAuWkN%2FkshSUVluKN52YKQhpDWSl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1217&quot; height=&quot;766&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토렌트 파일 삭제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할 점은 하드 디스크 파일도 삭제를 체크하면 어렵게 다운로드 받은 파일도 같이 삭제가 된다는 점, 아무런 체크를 하지 말고 그냥 확인을 누르자. 모든 과정이 완료 되었다. 단, 주의할 점은 저작권 문제는 안고 있다는 점 합법적인 토렌트 파일을 다운로드 하도록 빈다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiNG26/btrGIJYrDtK/gdPJ4S9jy2X6eIQ4EVClK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiNG26/btrGIJYrDtK/gdPJ4S9jy2X6eIQ4EVClK0/img.jpg&quot; data-alt=&quot;좋아요가 필요해&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiNG26/btrGIJYrDtK/gdPJ4S9jy2X6eIQ4EVClK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiNG26%2FbtrGIJYrDtK%2FgdPJ4S9jy2X6eIQ4EVClK0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;좋아요가 필요해&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Prateek Katyal님의 사진:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/2694434/&quot;&gt;https://www.pexels.com/ko-kr/photo/2694434/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>토렌트</category>
      <category>넷플릭스</category>
      <category>다운로드</category>
      <category>영화</category>
      <category>추천사이트</category>
      <category>추천토렌트</category>
      <category>토렌트</category>
      <category>토렌트사이트</category>
      <category>토렌트왈</category>
      <category>토렌트추천</category>
      <category>토렌트킴</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/490</guid>
      <comments>https://bthinkr.tistory.com/490#entry490comment</comments>
      <pubDate>Mon, 9 Oct 2023 11:02:48 +0900</pubDate>
    </item>
    <item>
      <title>웹용 AI 기반 Copilot 빙봇 이용기 - 사이트 개선점 문의</title>
      <link>https://bthinkr.tistory.com/511</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;하도 챗GPT 가 난리여서, 내 사이트에 대한 개선점을 물어봤다. ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빙 검색이 웹용 AI 기반 Copilot 엔진을 탑재해서 대화체로 질의 응답이 가능해 졌다. 한번 결과를 살펴보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIMJBf/btsa9yTk9NP/yZubVw3s1nAFPLxjfuKJX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIMJBf/btsa9yTk9NP/yZubVw3s1nAFPLxjfuKJX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIMJBf/btsa9yTk9NP/yZubVw3s1nAFPLxjfuKJX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIMJBf%2Fbtsa9yTk9NP%2FyZubVw3s1nAFPLxjfuKJX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;927&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 빗자루 모양 버튼을 누르면 새주제로 시작할 수 있다. 총 20번의 대화가 이뤄지도록 되어 있는 듯 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 무엇이든 물어보세요 창에다가 질문을 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 질문을 빙봇이 이해한대로 표현해주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 답변을 내준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 관련 후속 질문의 후보를 보여준다. 단순히 클릭만 해도 계속 대화를 이어 갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;웹용 AI 기반 Copilot 빙봇 이용기&quot; 에 대한 대답은&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;웹용 AI 기반 Copilot 빙봇은 마이크로소프트의 새로운 빙을 통해 제공되는 채팅 서비스입니다. 사용자가 웹에서 다양한 작업을 수행할 때 도움을 주는 인공지능 도구입니다. 웹용 AI 기반 Copilot 빙봇을 사용하려면 다음과 같은 과정이 필요합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 먼저 마이크로소프트 계정으로 로그인하고 대기 목록에 등록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 그 다음 마이크로소프트 엣지 브라우저를 이용해서 빙 홈페이지에 접속합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 그리고 &amp;lsquo;지금 채팅&amp;rsquo; 버튼을 클릭해서 채팅 창을 엽니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 채팅 창에서 원하는 질문을 입력하고 엔터를 치면 빙봇이 답변을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도전예제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 사이트 분석 후에 카테고리 정리를 추천해 줄 수 있어?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네, 도와드릴 수 있습니다. 사이트 분석은 웹사이트에 방문한 방문자들의 행동을 분석하는 과정입니다&lt;a href=&quot;https://mixpanel.com/ko/blog/%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EB%B6%84%EC%84%9D/&quot;&gt;1&lt;/a&gt;. 사이트 분석을 통해 다음과 같은 이점을 얻을 수 있습니다. 특정 고객이 과거에 제품을 구매한 후 재구매할 가능성을 판단합니다. 사이트를 반복적으로 방문하는 고객을 위해 사이트를 개인화합니다. 개별 고객 또는 특정 고객 그룹의 지출 금액을 모니터링합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 많은 고객이 사이트를 방문하고 특정 제품을 구매하는 지역을 관찰합니다.&lt;/li&gt;
&lt;li&gt;고객이 미래에 가장 많이 그리고 가장 적게 구매할 수 있는 제품을 예측합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트 분석을 위해서는 다음과 같은 단계를 거칩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;비즈니스 목표를 설정합니다. 웹사이트의 성공을 측정하기 위한 기준을 정합니다.&lt;/li&gt;
&lt;li&gt;추적 구현 계획을 작성합니다. 비즈니스 목표에 대한 질문에 답변할 수 있는 사용자 흐름 또는 행동 패턴을 식별하고, 이벤트와 속성을 정의합니다.&lt;/li&gt;
&lt;li&gt;데이터를 수집 및 처리합니다. 웹사이트 또는 웹 분석 도구에서 데이터를 수집하고, 실행 가능한 정보로 처리합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트 분석 후에 카테고리 정리를 추천해 줄 수 있는 도구는 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Wix Analytics&lt;a href=&quot;https://ko.wix.com/manage/analytics&quot;&gt;2&lt;/a&gt;: Wix에서 만든 웹사이트의 성과를 추적하고 개선할 수 있는 도구입니다. 페이지 뷰 수, 사이트 방문 시간, 거래 완료 등 다양한 마케팅 KPI를 확인할 수 있으며, 사이트 개선 방법에 대한 맞춤 추천을 받을 수 있습니다.&lt;/li&gt;
&lt;li&gt;brunch&lt;a href=&quot;https://brunch.co.kr/@socialmkt/34&quot;&gt;3&lt;/a&gt;: 빅데이터부터 소셜 분석까지 카테고리별 시장조사 자료를 제공하는 사이트입니다. 웹사이트 분석평가 서비스로 트래픽분석, 사이트 순위 및 자료 등을 찾을 수 있으며 자사 웹사이트나 경쟁사 사이트 순위를 한눈에 파악할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. kblck.com 블로그 사이트 개선점은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://kblck.com/&quot;&gt;kblck.com 블로그 사이트는 토렌트, Django, JQuery 등의 기술 노트를 공유하는 사이트입니다&lt;/a&gt;&lt;a href=&quot;http://kblck.com/&quot;&gt;1&lt;/a&gt;. 사이트의 개선점을 추천해 드리기 위해 간단하게 분석해 보았습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사이트의 디자인이 너무 단순하고 흰색 바탕에 검은색 글씨로만 구성되어 있어서 시각적으로 매력이 부족합니다. 색상, 폰트, 이미지 등을 조화롭게 사용하여 사이트의 분위기를 향상시킬 필요가 있습니다.&lt;/li&gt;
&lt;li&gt;사이트의 메뉴가 너무 적고 카테고리별로 구분되어 있지 않아서 내용을 찾기 어렵습니다. 메뉴를 늘리고 카테고리를 세분화하여 사용자가 원하는 정보를 쉽게 접근할 수 있도록 개선할 필요가 있습니다.&lt;/li&gt;
&lt;li&gt;사이트의 컨텐츠가 풍부하고 유용하지만, SEO 최적화가 잘 되어 있지 않아서 검색 엔진에서 잘 노출되지 않습니다. &lt;a href=&quot;https://eggrank.com/seo/best-keyword-research-tools/&quot;&gt;키워드 분석, 타이틀과 메타태그 작성, 내부링크 구축 등을 통해 SEO 점수를 높여야 합니다&lt;/a&gt;&lt;a href=&quot;https://eggrank.com/seo/best-keyword-research-tools/&quot;&gt;2&lt;/a&gt;&lt;a href=&quot;https://youlbe.tistory.com/entry/%EC%9D%B8%ED%84%B0%EB%84%B7-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%82%AC%EC%9D%B4%ED%8A%B8-HTML-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%EC%89%BD%EA%B2%8C-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0-%EB%B0%A9%EB%B2%95-%ED%81%AC%EB%A1%AC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8F%84%EA%B5%AC&quot;&gt;3&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;사이트의 소셜미디어 연동이 부족하여 SNS에서의 홍보와 교류가 적습니다. &lt;a href=&quot;https://m.blog.naver.com/imdavid1223/220923821246&quot;&gt;페이스북, 인스타그램, 유튜브 등의 SNS 계정을 만들고, 사이트에 SNS 아이콘을 추가하여 컨텐츠를 공유하고 팔로워를 늘릴 수 있도록 해야 합니다&lt;/a&gt;&lt;a href=&quot;https://m.blog.naver.com/imdavid1223/220923821246&quot;&gt;4&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 메뉴와&amp;nbsp;카테고리를&amp;nbsp;어떻게&amp;nbsp;구성하면&amp;nbsp;좋을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴와&amp;nbsp;카테고리는&amp;nbsp;사이트의&amp;nbsp;구조와&amp;nbsp;내용을&amp;nbsp;잘&amp;nbsp;표현하고&amp;nbsp;사용자가&amp;nbsp;원하는&amp;nbsp;정보를&amp;nbsp;쉽게&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;도와주는&amp;nbsp;중요한&amp;nbsp;요소입니다.&amp;nbsp;메뉴와&amp;nbsp;카테고리를&amp;nbsp;구성하는&amp;nbsp;방법은&amp;nbsp;다양하지만,&amp;nbsp;일반적으로&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;원칙을&amp;nbsp;따르면&amp;nbsp;좋습니다. &lt;br /&gt;&lt;br /&gt;메뉴와 카테고리는 사이트의 주제와 목적에 맞게 선정하고, 너무 많거나 적지 않게 설정합니다. 보통 3~7개 정도의 메뉴와 2~3단계 정도의 카테고리가 적당하다고 합니다.&lt;br /&gt;메뉴와 카테고리는 사용자의 관점에서 직관적이고 이해하기 쉬운 이름을 사용하고, 중복되거나 모호한 용어는 피합니다. 가능하면 한 단어로 표현하거나 약어를 사용하지 않습니다.&lt;br /&gt;메뉴와 카테고리는 사이트의 전체적인 흐름과 일관성을 유지하고, 순서와 레이아웃을 적절하게 배치합니다. 보통 가장 중요하거나 인기있는 메뉴나 카테고리를 왼쪽이나 상단에 두고, 하위 카테고리는 상위 카테고리와 연관성이 높은 순서로 정렬합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;kblck.com&amp;nbsp;블로그&amp;nbsp;사이트의&amp;nbsp;경우,&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;메뉴와&amp;nbsp;카테고리&amp;nbsp;구성&amp;nbsp;방법을&amp;nbsp;제안해&amp;nbsp;드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메뉴: 기술 노트, 블로그 팁, 소개&lt;/li&gt;
&lt;li&gt;기술 노트 카테고리: 토렌트, Django, JQuery, Python, HTML/CSS&lt;/li&gt;
&lt;li&gt;블로그 팁 카테고리: SEO, 디자인, 마케팅, 유용한 사이트&lt;/li&gt;
&lt;li&gt;소개 카테고리: 저자 소개, 문의하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게&amp;nbsp;하면&amp;nbsp;사이트의&amp;nbsp;주제와&amp;nbsp;내용을&amp;nbsp;잘&amp;nbsp;반영하면서도&amp;nbsp;간결하고&amp;nbsp;명확한&amp;nbsp;메뉴와&amp;nbsp;카테고리를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JzfdC/btsaqPozNht/MEWFGKkOr0D49yjjrcGJVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JzfdC/btsaqPozNht/MEWFGKkOr0D49yjjrcGJVk/img.png&quot; data-alt=&quot;대화형 검색&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JzfdC/btsaqPozNht/MEWFGKkOr0D49yjjrcGJVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJzfdC%2FbtsaqPozNht%2FMEWFGKkOr0D49yjjrcGJVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;531&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대화형 검색&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT리뷰</category>
      <category>AI</category>
      <category>똑똑한챗GPT</category>
      <category>블로그분석</category>
      <category>빙검색</category>
      <category>빙신</category>
      <category>사용기</category>
      <category>챗gpt</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/511</guid>
      <comments>https://bthinkr.tistory.com/511#entry511comment</comments>
      <pubDate>Mon, 17 Apr 2023 13:37:46 +0900</pubDate>
    </item>
    <item>
      <title>토렌트 다운로드 uTorrent 설치 및 사용법 - 2022.09.15</title>
      <link>https://bthinkr.tistory.com/443</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 환경에서 사용 가능한 토렌트 다운로드 프로그램 uTorrent 유토렌트 뮤토렌트를 설치하고 사용하는 방법을 알아보자.&amp;nbsp;토렌트 사이트에서 원하는 자료를 찾게되면, 토렌트 파일이나 마그넷 주소를 복사하면 자료 다운로드가 가능하다. 토렌트 파일은 그냥 다운로드 받은 .torrent 파일을 더블 클릭해서 실행하면 PC에 설치되어 있는 큐빗토렌트나 유토렌트 qBittorrent, uTorrent 프로그램이 실행되어 다운로드 받을 수 있다.&amp;nbsp;토렌트 파일에 대해서 조금 더 알고 싶다면 아래 링크가 도움이 될 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;&lt;a href=&quot;https://it.donga.com/22083/&quot;&gt;[IT강의실] 1:1 파일공유, 토렌트의 비밀&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마그넷 링크 파일 토렌트 파일 다운로드는 어디에서?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;툴을 다운로드하고 설치하기 이전에 이 토렌트 파일이나 마그넷 주소는 어떻게 찾을 수 있나? 사실 구글검색으로도 많은 자료를 찾을 수 있고 가져오면 된다. 사람들이 아주 많이 원하는 최신 영화, 드라마, 넷플릭스 동영상 등등등은 아래의 추천 사이트에서도 구할 수 있지만, 전문적인 자료는 구글링을 아주 잘해야 할 수 도 있다. 다운로드 받을 자료의 마그넷 주소를 제공해 주는 사이트는 특히 한국어 자료는 아래 글을 꼭 참고하세요. 아래 토렌트 사이트 추천 순위를 소개하는사이트를 참고하시면 토렌트 파일 다운로드나 마그넷 링크 파일 정보를 구할 수 있다.&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &amp;nbsp;&lt;a href=&quot;https://wiznxt.tistory.com/319&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;해외토렌트 사이트 추천 순위 - https://wiznxt.tistory.com/319&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다운로드에 필요한 uTorrent 설치하여 누구나 쉽게 자료를 인터넷에서 P2P 고급 기술로 받아 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;uTorrent 유토렌트 뮤토렌트 설치 및 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그럼 이제 기본 토렌트 마그넷 파일 다운로드 툴을 설치해 보자.&lt;/b&gt; 엉뚱한데 접속해서, 바이러스 걸리지 말고 아래 공식 사이트로 들어가세요. 같은 자료라도 어뚱한 곳에서 받으면 파일을 변조해서 이상한 것을 넣어 둘 수 있으므로, 몇 번 검색해보고 utorrent 공식 사이트로 들어간다. &amp;micro;Torrent&amp;reg; (uTorrent) Web torrent client for Windows -- uTorrent is a browser based torrent client.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.utorrent.com/downloads/complete/track/stable/os/win/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.utorrent.com/downloads/complete/track/stable/os/win/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 클래식, 즉 무료버전으로 설치하면 충분하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcu0Q3/btrnHR7VP29/YmP7BTVpXHsgt84sGVaky0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcu0Q3/btrnHR7VP29/YmP7BTVpXHsgt84sGVaky0/img.png&quot; data-alt=&quot;uTorrent classic&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcu0Q3/btrnHR7VP29/YmP7BTVpXHsgt84sGVaky0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcu0Q3%2FbtrnHR7VP29%2FYmP7BTVpXHsgt84sGVaky0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1203&quot; height=&quot;502&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;uTorrent classic&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-line=&quot;55&quot; data-ke-size=&quot;size16&quot;&gt;설치과정은 다른 툴과 유사하게 그냥 &quot;다음&quot; 버튼만 누르면 되는데,&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;중간에 필요없는 광고창은 설치가 안되도록 하는게 덜 귀찮을 듯~&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL8WMF/btrnE9VyxV1/FfqCqfBht5DBKSSqAl09Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL8WMF/btrnE9VyxV1/FfqCqfBht5DBKSSqAl09Fk/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL8WMF/btrnE9VyxV1/FfqCqfBht5DBKSSqAl09Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL8WMF%2FbtrnE9VyxV1%2FFfqCqfBht5DBKSSqAl09Fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGNGcZ/btrnJBX6bHN/BMks4uUOe6eIUMMKDi0xb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGNGcZ/btrnJBX6bHN/BMks4uUOe6eIUMMKDi0xb1/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGNGcZ/btrnJBX6bHN/BMks4uUOe6eIUMMKDi0xb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGNGcZ%2FbtrnJBX6bHN%2FBMks4uUOe6eIUMMKDi0xb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c62aSd/btrnC3O30yd/99cYJ99Wlk7lPs3HTukrLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c62aSd/btrnC3O30yd/99cYJ99Wlk7lPs3HTukrLK/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 32.5581%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c62aSd/btrnC3O30yd/99cYJ99Wlk7lPs3HTukrLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc62aSd%2FbtrnC3O30yd%2F99cYJ99Wlk7lPs3HTukrLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;귀찮은 외부 설치 파일 안하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광고 프로그램이나 바로가기 같은 것도 귀찮으니 체크박스 해제하고,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9xKCz/btrnHSmfwpl/XOP0KGmaJtfELs3j1MG30K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9xKCz/btrnHSmfwpl/XOP0KGmaJtfELs3j1MG30K/img.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;495&quot; style=&quot;width: 49.5535%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9xKCz/btrnHSmfwpl/XOP0KGmaJtfELs3j1MG30K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9xKCz%2FbtrnHSmfwpl%2FXOP0KGmaJtfELs3j1MG30K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;696&quot; height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbz4tC/btrnClowGZc/iUmUg5KMjridWEB99fOBIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbz4tC/btrnClowGZc/iUmUg5KMjridWEB99fOBIk/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 49.2837%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbz4tC/btrnClowGZc/iUmUg5KMjridWEB99fOBIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbz4tC%2FbtrnClowGZc%2FiUmUg5KMjridWEB99fOBIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efTiRT/btrnHSTjWc3/jcRufTfqRmRue6tlVklib0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efTiRT/btrnHSTjWc3/jcRufTfqRmRue6tlVklib0/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 49.4186%; margin-right: 10px; margin-top: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efTiRT/btrnHSTjWc3/jcRufTfqRmRue6tlVklib0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefTiRT%2FbtrnHSTjWc3%2FjcRufTfqRmRue6tlVklib0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QyWoo/btrnHSFL338/AaQlcpaUVCtaXADPqpZRmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QyWoo/btrnHSFL338/AaQlcpaUVCtaXADPqpZRmk/img.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;502&quot; style=&quot;width: 49.4186%; margin-top: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QyWoo/btrnHSFL338/AaQlcpaUVCtaXADPqpZRmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQyWoo%2FbtrnHSFL338%2FAaQlcpaUVCtaXADPqpZRmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;바로가기 없애기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;방화벽 예외는 등록 해야 되고&lt;/span&gt;, 부팅시 항상 시작 원하는 분만 체크박스를 그대로 두시고 싫으면 해제하세요.&lt;/p&gt;
&lt;p data-line=&quot;75&quot; data-ke-size=&quot;size16&quot;&gt;실행 후, 설정에서 간단하게 자신의 원하는 위치로 다운로드 위치만 지정하고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt9j32/btrnHSlr7Hi/CjpOztxcvDk1zndpcoYkzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt9j32/btrnHSlr7Hi/CjpOztxcvDk1zndpcoYkzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt9j32/btrnHSlr7Hi/CjpOztxcvDk1zndpcoYkzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt9j32%2FbtrnHSlr7Hi%2FCjpOztxcvDk1zndpcoYkzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;626&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;79&quot; data-ke-size=&quot;size16&quot;&gt;옵션에서 창에 보고 싶은 것만 체크하고 그냥 사용하면 된다. 토렌트 파일을 열거나, 마그넷 파일/링크를 클릭하면 이 프로그램이 뜨면서 다운로드가 가능해 진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp6tu2/btrnC14M6TF/SHcq4MHkbl2nN05J59Wtzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp6tu2/btrnC14M6TF/SHcq4MHkbl2nN05J59Wtzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp6tu2/btrnC14M6TF/SHcq4MHkbl2nN05J59Wtzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp6tu2%2FbtrnC14M6TF%2FSHcq4MHkbl2nN05J59Wtzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;626&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또다른 유명한 토렌트 다운로드 툴이 있다. qBittorrent 다운로드 및 설치 방법은 아래 링크를 참고하세요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;  &lt;a title=&quot;큐빗토렌트 설치 및 사용법&quot; href=&quot;https://wiznxt.tistory.com/778&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;토렌트 다운로드 프로그램 qBittorrent 큐빗토렌트 소개&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;uTorrent 프로그램으로 토렌트 파일 다운로드 실습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제로 가져올 파일은 그래도 안전한 파일을 가져와 보자. 저작권 문제 없는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;a href=&quot;https://webtorrent.io/free-torrents&quot;&gt;https://webtorrent.io/free-torrents&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639395227662&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Free Torrents - Public Domain, Creative Commons - WebTorrent&quot; data-og-description=&quot;WebTorrent, the streaming torrent client for the browser, Mac, Windows, and Linux&quot; data-og-host=&quot;webtorrent.io&quot; data-og-source-url=&quot;https://webtorrent.io/free-torrents&quot; data-og-url=&quot;https://webtorrent.io/free-torrents&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b43H2L/hyMFMA9G3r/aiqrfG3YoH5yJQP5QXJJZk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://webtorrent.io/free-torrents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webtorrent.io/free-torrents&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b43H2L/hyMFMA9G3r/aiqrfG3YoH5yJQP5QXJJZk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Free Torrents - Public Domain, Creative Commons - WebTorrent&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;WebTorrent, the streaming torrent client for the browser, Mac, Windows, and Linux&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;webtorrent.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에서 무료로 배포하는 파일 하나 골라보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tears of Steel&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://webtorrent.io/torrents/tears-of-steel.torrent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(torrent file)&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://magnet:?xt=urn:btih:209c8226b299b308beaf2b9cd3fb49212dbd13ec&amp;amp;dn=Tears+of+Steel&amp;amp;tr=udp%3A%2F%2Fexplodie.org%3A6969&amp;amp;tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&amp;amp;tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&amp;amp;tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&amp;amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&amp;amp;tr=wss%3A%2F%2Ftracker.btorrent.xyz&amp;amp;tr=wss%3A%2F%2Ftracker.fastcast.nz&amp;amp;tr=wss%3A%2F%2Ftracker.openwebtorrent.com&amp;amp;ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&amp;amp;xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Ftears-of-steel.torrent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(magnet link)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;magnet link 를 클릭해서 uTorrent 열기하거나 마그넷 주소를 직접 복사해서 가져오면, uTorrent 에서 파일&amp;gt;&quot;주소에서 토렌트 추가&quot; 누르면 끝&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBYUu/btrnN2niZKs/hi6IYVE2tx7dzFtEwNTzj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBYUu/btrnN2niZKs/hi6IYVE2tx7dzFtEwNTzj1/img.png&quot; data-alt=&quot;주소에서 토렌트 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBYUu/btrnN2niZKs/hi6IYVE2tx7dzFtEwNTzj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBYUu%2FbtrnN2niZKs%2Fhi6IYVE2tx7dzFtEwNTzj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;626&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주소에서 토렌트 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;108&quot; data-ke-size=&quot;size16&quot;&gt;아래 같이 파일의 정보가 뜨면, 양호한 파일이다. 이제 마그넷 다운로드나 토렌트 파일을 다운로드 할 준비가 되었다. 확인을 누르면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DHfO2/btrnC2P9MsK/krKTUrOuggC3Va4WExF9H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DHfO2/btrnC2P9MsK/krKTUrOuggC3Va4WExF9H1/img.png&quot; data-alt=&quot;다운받을 토렌트 파일 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DHfO2/btrnC2P9MsK/krKTUrOuggC3Va4WExF9H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDHfO2%2FbtrnC2P9MsK%2FkrKTUrOuggC3Va4WExF9H1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;938&quot; height=&quot;533&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다운받을 토렌트 파일 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;113&quot; data-ke-size=&quot;size16&quot;&gt;다운 중 이라는 메시지가 뜬다. 속도도 나오고 피어도 나오고 예상 시간도 나오고, 머 그런데 중요하지 않다. 녹색이 쭉 나와 있어야 최종 다운로드가 가능하다. 꼭 확인하자!!&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;002&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ulGzA/btrnLHqcaQc/mKrTU1eKtXpWooqtCjkq5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ulGzA/btrnLHqcaQc/mKrTU1eKtXpWooqtCjkq5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ulGzA/btrnLHqcaQc/mKrTU1eKtXpWooqtCjkq5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FulGzA%2FbtrnLHqcaQc%2FmKrTU1eKtXpWooqtCjkq5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;626&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;118&quot; data-ke-size=&quot;size16&quot;&gt;다운로드 화면 참고로 다운로드 화면에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ee2323; color: #ffffff;&quot;&gt;&lt;b&gt;가용성 부분에 빨간색 비슷한게 있으면 다운로드 완료가 힘들다는 것.&lt;/b&gt;.&lt;/span&gt;꼭 챙겨보길!! (글의 양이 너무 작다는 판단에, 아예 다음 편 실습편을 아래에 붙여서 이 포스트에서 관리하기로...)&lt;/p&gt;
&lt;p data-line=&quot;118&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마그넷 파일 검색 실습 및 다운로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제, 마그넷 파일을 제공해주는 사이트로 가서 실습을 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해적선 사이트로 가서 실습을 해보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thepiratebay.org/&quot;&gt;해적선 사이트&lt;/a&gt; - &lt;b&gt;&lt;a href=&quot;https://www.thepiratebay.org/&quot;&gt;https://www.thepiratebay.org/&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속하면 아래와 같은 토렌트 검색 화면이 나타난다. 구글과 무슨 차이가 있으랴~~ 그냥 원하는 자료 검색어를 입력하면 된다. 동영상 자료가 너무 많이 나오니깐, 아래 분류를 선택하는 부분을 지정해서 하는 것도 도움이 된다.&lt;/p&gt;
&lt;div id=&quot;mad&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-5454233532516326&quot; data-ad-slot=&quot;5050775494&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;p data-line=&quot;136&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;검색 결과 화면에서 Seeders, Leechers 가 많은 자료를 필히 선택해야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-line=&quot;138&quot; data-ke-size=&quot;size16&quot;&gt;특히, Seeders 가 많은 자료를 받아야 한다. Seeders 가 0이면 다운로드가 완료되지 않으니 주의!!! 아래 화면에서 SE, LE 를 누르면 많은 순으로 정렬이 되니 필수적으로 눌러서 많은 자료를 받도록!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vSLBT/btrnPChqLiC/vpmHruDXH6WDIvCQk4XcLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vSLBT/btrnPChqLiC/vpmHruDXH6WDIvCQk4XcLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vSLBT/btrnPChqLiC/vpmHruDXH6WDIvCQk4XcLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvSLBT%2FbtrnPChqLiC%2FvpmHruDXH6WDIvCQk4XcLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;952&quot; height=&quot;661&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;144&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원하는 자료 마그넷 magnet 주소나 토렌트 torrent 주소를 누르면 끝&lt;/b&gt;&lt;/p&gt;
&lt;p data-line=&quot;144&quot; data-ke-size=&quot;size16&quot;&gt;너무 간단하다 여기서도 &lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;Seeders Leechers 를 확인해 보는 것을 추천합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pUZtv/btrnJdisTJ2/6AiHOTfgAuKoRC9XikB1d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pUZtv/btrnJdisTJ2/6AiHOTfgAuKoRC9XikB1d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pUZtv/btrnJdisTJ2/6AiHOTfgAuKoRC9XikB1d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpUZtv%2FbtrnJdisTJ2%2F6AiHOTfgAuKoRC9XikB1d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;952&quot; height=&quot;661&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;149&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주소를 클릭하면, 설치해 둔 uTorrent 프로그램 같은 토렌트 다운로드 프로그램이 실행 된다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;물론 큐빗토렌트 같은 다른 프로그램이 설치되어 있으면 해당 프로그램이 대신 실행될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oa7g8/btrnJAx5vZs/rFWhWSCfrtpakdBA7ZC8A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oa7g8/btrnJAx5vZs/rFWhWSCfrtpakdBA7ZC8A0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oa7g8/btrnJAx5vZs/rFWhWSCfrtpakdBA7ZC8A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foa7g8%2FbtrnJAx5vZs%2FrFWhWSCfrtpakdBA7ZC8A0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;116&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-line=&quot;155&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다운로드를 시작하면 토렌트 파일에 링크되어 있는 파일 다운로드 완료!!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMgBxI/btrnLIik96J/okSs1XMd6nuv9hKw2GTdD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMgBxI/btrnLIik96J/okSs1XMd6nuv9hKw2GTdD1/img.png&quot; data-alt=&quot;마그넷 파일 다운로드 완료!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMgBxI/btrnLIik96J/okSs1XMd6nuv9hKw2GTdD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMgBxI%2FbtrnLIik96J%2FokSs1XMd6nuv9hKw2GTdD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;938&quot; height=&quot;533&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마그넷 파일 다운로드 완료!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>토렌트</category>
      <category>P2P</category>
      <category>torrent</category>
      <category>utorrent</category>
      <category>넷플릭스</category>
      <category>다운로드</category>
      <category>드라마</category>
      <category>사용법</category>
      <category>설치</category>
      <category>최신영화</category>
      <category>토렌트</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/443</guid>
      <comments>https://bthinkr.tistory.com/443#entry443comment</comments>
      <pubDate>Sun, 26 Feb 2023 19:29:39 +0900</pubDate>
    </item>
    <item>
      <title>Django - ORM 에서 not in 처리하기</title>
      <link>https://bthinkr.tistory.com/505</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 not in 키워드가 있으면 좋은데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1665376965069&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;4. NOT 연산으로 조건을 부정하려면 어떻게 하나요? &amp;mdash; Django ORM Cookbook 2.0 documentation&quot; data-og-description=&quot;4. NOT 연산으로 조건을 부정하려면 어떻게 하나요? 장고의 사용자 계정 관리 앱인 django.contrib.auth 를 사용하면 데이터베이스에 auth_user 라는 표가 생성됩니다. 이 표에는 username, first_name, last_name &quot; data-og-host=&quot;django-orm-cookbook-ko.readthedocs.io&quot; data-og-source-url=&quot;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&quot; data-og-url=&quot;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkB9y0/hyP6p1SZgH/K3uJ4BNpI3giByMv8KaVPk/img.png?width=320&amp;amp;height=512&amp;amp;face=0_0_320_512,https://scrap.kakaocdn.net/dn/GG970/hyP4AxcPwc/Asb9DTmuVVmFkjTqGe49A0/img.png?width=320&amp;amp;height=480&amp;amp;face=0_0_320_480,https://scrap.kakaocdn.net/dn/ibXCh/hyP6B2j4QX/qKuepPrQzLcsh6QoeoNDQK/img.png?width=320&amp;amp;height=480&amp;amp;face=0_0_320_480&quot;&gt;&lt;a href=&quot;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://django-orm-cookbook-ko.readthedocs.io/en/latest/notequal_query.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkB9y0/hyP6p1SZgH/K3uJ4BNpI3giByMv8KaVPk/img.png?width=320&amp;amp;height=512&amp;amp;face=0_0_320_512,https://scrap.kakaocdn.net/dn/GG970/hyP4AxcPwc/Asb9DTmuVVmFkjTqGe49A0/img.png?width=320&amp;amp;height=480&amp;amp;face=0_0_320_480,https://scrap.kakaocdn.net/dn/ibXCh/hyP6B2j4QX/qKuepPrQzLcsh6QoeoNDQK/img.png?width=320&amp;amp;height=480&amp;amp;face=0_0_320_480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;4. NOT 연산으로 조건을 부정하려면 어떻게 하나요? &amp;mdash; Django ORM Cookbook 2.0 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;4. NOT 연산으로 조건을 부정하려면 어떻게 하나요? 장고의 사용자 계정 관리 앱인 django.contrib.auth 를 사용하면 데이터베이스에 auth_user 라는 표가 생성됩니다. 이 표에는 username, first_name, last_name&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;django-orm-cookbook-ko.readthedocs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;exclude(&amp;lt;condition&amp;gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;filter(~Q(&amp;lt;condition&amp;gt;))&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;필드명__in=[a,b,c]&amp;nbsp; 이런식으로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;__not_in 이르게 제공하면 편할 텐데, 아무튼 위의 2가지 방법으로 시도하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예제는 저자들로 들어가시는게 예의인듯 하여 안가져옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;021&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/021.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/021.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQqod9/btrN8ByjYwn/4imV26c5eCkO7BX1RQ1zgK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQqod9/btrN8ByjYwn/4imV26c5eCkO7BX1RQ1zgK/img.jpg&quot; data-alt=&quot;레몬 완전체가 아닌것을 찾으시오&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQqod9/btrN8ByjYwn/4imV26c5eCkO7BX1RQ1zgK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQqod9%2FbtrN8ByjYwn%2F4imV26c5eCkO7BX1RQ1zgK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1127&quot; height=&quot;750&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레몬 완전체가 아닌것을 찾으시오&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 SHVETS production님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/7195055/&quot;&gt;https://www.pexels.com/ko-kr/photo/7195055/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>exclude</category>
      <category>Filter</category>
      <category>in</category>
      <category>not</category>
      <category>ORM</category>
      <category>q</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/505</guid>
      <comments>https://bthinkr.tistory.com/505#entry505comment</comments>
      <pubDate>Mon, 10 Oct 2022 13:45:55 +0900</pubDate>
    </item>
    <item>
      <title>billboard.js chart - legend 문자열 바꾸기 (Data name)</title>
      <link>https://bthinkr.tistory.com/504</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;실컷 그룹핑을 해뒀는데, 그룹핑 한 문자열에 총 합을 추가 하려고 하니 그룹 자체의 문자열이 바뀌니 이차저차 고민하던 차에 먼저 그룹핑 다하고, 나중에 Data name을 바꾸는 방법으로 접근하면 되겠다라고 생각했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고, 아래와 같이 처리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고 코드와 결합해서 사용하려니, 제약이 좀 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 성공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664794415846&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;{% static 'vendor/d3/d3.min.js' %}&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;{% static 'vendor/billboard/billboard.min.js' %}&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;{% static 'vendor/billboard/datalab.min.css' %}&quot;&amp;gt;
&amp;lt;script&amp;gt;dayjs().format()&amp;lt;/script&amp;gt;    
&amp;lt;script language=&quot;javascript&quot;&amp;gt;
var chart = bb.generate({
  // size: { height: 400 },
  data: {
    columns: [
    {% for item in result_billboard %}{{ item|safe }},{% endfor %}
    ],
    type: &quot;area-spline&quot;, // for ESM specify as: areaSpline()
    groups: [[
    {% for item in result_groupby_product_count %}'{{ item.product_name|safe }}',{% endfor %}
    ]],
  },
  axis: {
    x: {
      tick: {format: function(x){return (x+1)+&quot;월&quot;;}}
    }  
  },
  bindto: &quot;#chart-container&quot;
});
setTimeout(function() {
  chart.data.names({
{% for item in result_groupby_product_count %}
    '{{ item.product_name|safe }}' : '{{ item.product_name|safe }}({{ item.sum_count|intcomma }}개)', 
{% endfor %}
    });
}, 1000);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjG6sH/btrNFUEurzR/EQs4yWRbznUvQwWLbGkdBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjG6sH/btrNFUEurzR/EQs4yWRbznUvQwWLbGkdBK/img.png&quot; data-alt=&quot;처음 그룹핑만&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjG6sH/btrNFUEurzR/EQs4yWRbznUvQwWLbGkdBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjG6sH%2FbtrNFUEurzR%2FEQs4yWRbznUvQwWLbGkdBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;523&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;처음 그룹핑만&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vol7C/btrNwDdn1oo/khAIx06g2BdIq09KAgS4j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vol7C/btrNwDdn1oo/khAIx06g2BdIq09KAgS4j1/img.png&quot; data-alt=&quot;1초후 수량 정보 포함된 Data name으로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vol7C/btrNwDdn1oo/khAIx06g2BdIq09KAgS4j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVol7C%2FbtrNwDdn1oo%2FkhAIx06g2BdIq09KAgS4j1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;799&quot; height=&quot;524&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1초후 수량 정보 포함된 Data name으로 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고사이트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://naver.github.io/billboard.js/demo/#API.DataName&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://naver.github.io/billboard.js/demo/#API.DataName&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664794583174&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;billboard.js - examples&quot; data-og-description=&quot;Sample code &amp;bull; Try it out by editing below code or click right sided buttons. &amp;nbsp; *for ESM imports usage example, checkout this link. Copy to Clipboard JS TS&quot; data-og-host=&quot;naver.github.io&quot; data-og-source-url=&quot;https://naver.github.io/billboard.js/demo/#API.DataName&quot; data-og-url=&quot;https://naver.github.io/billboard.js/demo/#API.DataName&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://naver.github.io/billboard.js/demo/#API.DataName&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naver.github.io/billboard.js/demo/#API.DataName&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;billboard.js - examples&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sample code &amp;bull; Try it out by editing below code or click right sided buttons. &amp;nbsp; *for ESM imports usage example, checkout this link. Copy to Clipboard JS TS&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;naver.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>billboard.js</category>
      <category>chart</category>
      <category>dataname</category>
      <category>Django</category>
      <category>javascript</category>
      <category>legend</category>
      <category>Timeout</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/504</guid>
      <comments>https://bthinkr.tistory.com/504#entry504comment</comments>
      <pubDate>Mon, 3 Oct 2022 19:57:10 +0900</pubDate>
    </item>
    <item>
      <title>Django - session 처리 방법</title>
      <link>https://bthinkr.tistory.com/503</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 세션 처리 방법을 정리해 두자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 글은 여기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.programink.com/django-tutorial/django-session.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.programink.com/django-tutorial/django-session.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664525701885&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Django Tutorial | Django Session &amp;amp; Login Session&quot; data-og-description=&quot;Learn Django Session variable and server side caching with this Django Session Tutorial.&quot; data-og-host=&quot;www.programink.com&quot; data-og-source-url=&quot;https://www.programink.com/django-tutorial/django-session.html&quot; data-og-url=&quot;https://www.programink.com/django-tutorial/django-session.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5W92M/hyPXHiylQu/o4EwJaqGG1hINs9taWPmc1/img.png?width=1747&amp;amp;height=1240&amp;amp;face=0_0_1747_1240,https://scrap.kakaocdn.net/dn/uo6M1/hyPY0t1jGW/FKS0xv6y9wjFHKCrhAJ87k/img.png?width=1747&amp;amp;height=1240&amp;amp;face=0_0_1747_1240&quot;&gt;&lt;a href=&quot;https://www.programink.com/django-tutorial/django-session.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.programink.com/django-tutorial/django-session.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5W92M/hyPXHiylQu/o4EwJaqGG1hINs9taWPmc1/img.png?width=1747&amp;amp;height=1240&amp;amp;face=0_0_1747_1240,https://scrap.kakaocdn.net/dn/uo6M1/hyPY0t1jGW/FKS0xv6y9wjFHKCrhAJ87k/img.png?width=1747&amp;amp;height=1240&amp;amp;face=0_0_1747_1240');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django Tutorial | Django Session &amp;amp; Login Session&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn Django Session variable and server side caching with this Django Session Tutorial.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.programink.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 샘플은 다음과 같다. 쉽네 request.session[&quot;키워드&quot;] 이렇게 쓰고, 읽으면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1664525719093&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.shortcuts import render  
from django.http import HttpResponse  
      
def setsession(request):  
        request.session['sname'] = 'Ram'  
        return HttpResponse(&quot;User session is set&quot;)  
        
def getsession(request):  
        sname = request.session['sname']  
        return HttpResponse(&quot;Welcome &quot; + sname);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션 타임아웃은 지정 방식은&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;SESSION_COOKIE_AGE = 60 # for 60 seconds timestamp &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나더는,&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;    MIDDLEWARE = [
    ...
    'django_session_timeout.middleware.SessionTimeoutMiddleware',
    ...
    ]
                                
    SESSION_EXPIRE_SECONDS = 30
    SESSION_EXPIRE_AFTER_LAST_ACTIVITY = True&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점은 좀 읽어보고 다시 정리하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 페이지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@tap2/django03&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@tap2/django03&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664526291701&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;django_세션을 활용한 로그인 및 로그아웃 기본로직&quot; data-og-description=&quot;views 사용자가 보낸 데이터와 회원가입을 통해 데이터베이스에 저장된 사용자의 정보가 일치하는지 확인 session에 사용자를 구별할 수 있는 정보를 key-value 형식으로 담아 응답을 보낸다. session에&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@tap2/django03&quot; data-og-url=&quot;https://velog.io/@tap2/django03&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGGHRw/hyPXGRta1K/Yw2EGRkvg2Q7m9wC4Vapx1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bIlhqt/hyPY9kcirl/yBvuvOMZHQX6JRpL56r50K/img.png?width=1052&amp;amp;height=453&amp;amp;face=0_0_1052_453&quot;&gt;&lt;a href=&quot;https://velog.io/@tap2/django03&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@tap2/django03&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGGHRw/hyPXGRta1K/Yw2EGRkvg2Q7m9wC4Vapx1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bIlhqt/hyPY9kcirl/yBvuvOMZHQX6JRpL56r50K/img.png?width=1052&amp;amp;height=453&amp;amp;face=0_0_1052_453');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;django_세션을 활용한 로그인 및 로그아웃 기본로직&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;views 사용자가 보낸 데이터와 회원가입을 통해 데이터베이스에 저장된 사용자의 정보가 일치하는지 확인 session에 사용자를 구별할 수 있는 정보를 key-value 형식으로 담아 응답을 보낸다. session에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arotein.tistory.com/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arotein.tistory.com/27&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664526267973&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django Memo] 장고가 로그인 세션을 처리하는 방법&quot; data-og-description=&quot;로그인 과정 -참고 글- [Django&amp;nbsp;Memo]&amp;nbsp;로컬&amp;nbsp;환경에서&amp;nbsp;DB&amp;nbsp;열람 장고에서 로그인이 진행되는 과정은 다음과 같습니다. 1. 클라이언트가 로그인을 시도합니다. 2. view나 form의 clean 메서드에서 로그인&quot; data-og-host=&quot;arotein.tistory.com&quot; data-og-source-url=&quot;https://arotein.tistory.com/27&quot; data-og-url=&quot;https://arotein.tistory.com/27&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gRkrT/hyPXMjSLdd/PynreV3RPxgKwCuGavoJf0/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/boyhOV/hyPXD8i50B/bXQtgunIVvv0tQekaHKaU0/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/b05gG9/hyPYYprklf/06rc16m6fCGkMIAmt8Vo0k/img.png?width=1921&amp;amp;height=1291&amp;amp;face=0_0_1921_1291&quot;&gt;&lt;a href=&quot;https://arotein.tistory.com/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arotein.tistory.com/27&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gRkrT/hyPXMjSLdd/PynreV3RPxgKwCuGavoJf0/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/boyhOV/hyPXD8i50B/bXQtgunIVvv0tQekaHKaU0/img.png?width=800&amp;amp;height=537&amp;amp;face=0_0_800_537,https://scrap.kakaocdn.net/dn/b05gG9/hyPYYprklf/06rc16m6fCGkMIAmt8Vo0k/img.png?width=1921&amp;amp;height=1291&amp;amp;face=0_0_1921_1291');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Django Memo] 장고가 로그인 세션을 처리하는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;로그인 과정 -참고 글- [Django&amp;nbsp;Memo]&amp;nbsp;로컬&amp;nbsp;환경에서&amp;nbsp;DB&amp;nbsp;열람 장고에서 로그인이 진행되는 과정은 다음과 같습니다. 1. 클라이언트가 로그인을 시도합니다. 2. view나 form의 clean 메서드에서 로그인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arotein.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664526277897&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django]로그인 유지하기, 쿠키와 세션&quot; data-og-description=&quot;저번 포스팅에서 HTTP 통신에 대해서 알아보았습니다. 그리고 이 정보는 상태 비 저장 프로토콜 입니다.우리가 로그인을 할 때 아이디와 비밀번호의 정보도 HTTP 통신 중 POST 방식으로 보내기 떄문&quot; data-og-host=&quot;ssungkang.tistory.com&quot; data-og-source-url=&quot;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&quot; data-og-url=&quot;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAKWrn/hyPZa4t1cp/Z9NlPVZaRjhM9sdW4MkvU0/img.jpg?width=728&amp;amp;height=546&amp;amp;face=0_0_728_546,https://scrap.kakaocdn.net/dn/3Wr3k/hyPY5oy4Ws/d12FOLtkiYGVskHZ20uchK/img.jpg?width=728&amp;amp;height=546&amp;amp;face=0_0_728_546,https://scrap.kakaocdn.net/dn/XWyfU/hyPYVzup3C/ceexXs9iPB6cHLThb0fZK1/img.jpg?width=1052&amp;amp;height=1248&amp;amp;face=267_380_686_838&quot;&gt;&lt;a href=&quot;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ssungkang.tistory.com/entry/Django%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAKWrn/hyPZa4t1cp/Z9NlPVZaRjhM9sdW4MkvU0/img.jpg?width=728&amp;amp;height=546&amp;amp;face=0_0_728_546,https://scrap.kakaocdn.net/dn/3Wr3k/hyPY5oy4Ws/d12FOLtkiYGVskHZ20uchK/img.jpg?width=728&amp;amp;height=546&amp;amp;face=0_0_728_546,https://scrap.kakaocdn.net/dn/XWyfU/hyPYVzup3C/ceexXs9iPB6cHLThb0fZK1/img.jpg?width=1052&amp;amp;height=1248&amp;amp;face=267_380_686_838');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Django]로그인 유지하기, 쿠키와 세션&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;저번 포스팅에서 HTTP 통신에 대해서 알아보았습니다. 그리고 이 정보는 상태 비 저장 프로토콜 입니다.우리가 로그인을 할 때 아이디와 비밀번호의 정보도 HTTP 통신 중 POST 방식으로 보내기 떄문&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ssungkang.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7jr0d/btrNuLhfe4z/iTfP5VJzoDKG0X8wSZkJQ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7jr0d/btrNuLhfe4z/iTfP5VJzoDKG0X8wSZkJQ0/img.jpg&quot; data-alt=&quot;시간이 중요해&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7jr0d/btrNuLhfe4z/iTfP5VJzoDKG0X8wSZkJQ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7jr0d%2FbtrNuLhfe4z%2FiTfP5VJzoDKG0X8wSZkJQ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시간이 중요해&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 JESHOOTS.com님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/714701/&quot;&gt;https://www.pexels.com/ko-kr/photo/714701/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>session</category>
      <category>Timeout</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/503</guid>
      <comments>https://bthinkr.tistory.com/503#entry503comment</comments>
      <pubDate>Fri, 30 Sep 2022 17:18:48 +0900</pubDate>
    </item>
    <item>
      <title>JQuery - on('change') vs change() 어떤 것을 쓰나?</title>
      <link>https://bthinkr.tistory.com/502</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 함수를 등록해서 쓰고 싶은데, 2가지 방식이 있네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;on('change') vs change()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘다 맞는데, 머 정답이라기 보다는 그냥 on(이벤트, function() {}); 형태로 사용하는 것을 강권합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적으로 생긴 컴포넌트도 쓸수있도록 하려면 on('change',... 를 쓰라고 하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1664513825798&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JQuery 클릭 이벤트 on(&amp;quot;click&amp;quot;) 과 click() 의 차이&quot; data-og-description=&quot;JQuery on(&amp;quot;click&amp;quot;)과 click() on(&amp;quot;click&amp;quot;) 과&amp;nbsp;click() 의 차이점은 동적으로 이벤트를 바인딩할 수 있는지의 차이다. on(&amp;quot;click&amp;quot;)은 동적으로 가능하고 click()은 최초에 선언된 element에만 동작한다. 아래 예..&quot; data-og-host=&quot;lookingfor.tistory.com&quot; data-og-source-url=&quot;https://lookingfor.tistory.com/entry/JQuery-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-onclick-%EA%B3%BC-click-%EC%9D%98-%EC%B0%A8%EC%9D%B4&quot; data-og-url=&quot;https://lookingfor.tistory.com/entry/JQuery-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-onclick-%EA%B3%BC-click-%EC%9D%98-%EC%B0%A8%EC%9D%B4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bTrtYe/hyPXIauvM6/WQOamPdk06LFcRbR0k5de0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cndOAn/hyPXCVEwAn/OS4sb0KsMx65Vy763Uea3K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lookingfor.tistory.com/entry/JQuery-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-onclick-%EA%B3%BC-click-%EC%9D%98-%EC%B0%A8%EC%9D%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lookingfor.tistory.com/entry/JQuery-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8-onclick-%EA%B3%BC-click-%EC%9D%98-%EC%B0%A8%EC%9D%B4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bTrtYe/hyPXIauvM6/WQOamPdk06LFcRbR0k5de0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cndOAn/hyPXCVEwAn/OS4sb0KsMx65Vy763Uea3K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JQuery 클릭 이벤트 on(&quot;click&quot;) 과 click() 의 차이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JQuery on(&quot;click&quot;)과 click() on(&quot;click&quot;) 과&amp;nbsp;click() 의 차이점은 동적으로 이벤트를 바인딩할 수 있는지의 차이다. on(&quot;click&quot;)은 동적으로 가능하고 click()은 최초에 선언된 element에만 동작한다. 아래 예..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lookingfor.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZPNDT/btrNreYp3xz/xMYTAIol7tXUT9WiAwIbM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZPNDT/btrNreYp3xz/xMYTAIol7tXUT9WiAwIbM1/img.jpg&quot; data-alt=&quot;무엇으로 고를까?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZPNDT/btrNreYp3xz/xMYTAIol7tXUT9WiAwIbM1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZPNDT%2FbtrNreYp3xz%2FxMYTAIol7tXUT9WiAwIbM1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무엇으로 고를까?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Karolina Grabowska님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/4202998/&quot;&gt;https://www.pexels.com/ko-kr/photo/4202998/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>change</category>
      <category>click</category>
      <category>event</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>jquery</category>
      <category>On</category>
      <category>select</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/502</guid>
      <comments>https://bthinkr.tistory.com/502#entry502comment</comments>
      <pubDate>Fri, 30 Sep 2022 13:59:46 +0900</pubDate>
    </item>
    <item>
      <title>Django ORM - exists()</title>
      <link>https://bthinkr.tistory.com/501</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;레코드가 혹은 object 가 있는 지 조사할 때 사용되는 method???&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;exists() 라는 게 있는데 아래 글 처럼 약간 고민해야 되는 부분이 있네요. 체크 이후에 그 오브젝트를 활용할 생각이 있으면 그냥 if obejct: 이렇게 하고 단순히 체크만 하면 exist() 가 조금 유리하다는...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1660864582872&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;QuerySet API reference | Django documentation | Django&quot; data-og-description=&quot;Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About &amp;hearts; Donate&quot; data-og-host=&quot;docs.djangoproject.com&quot; data-og-source-url=&quot;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&quot; data-og-url=&quot;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.djangoproject.com/en/4.1/ref/models/querysets/#django.db.models.query.QuerySet.exists&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;QuerySet API reference | Django documentation | Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About &amp;hearts; Donate&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.djangoproject.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;&lt;a href=&quot;https://medium.com/@bdv111/django%EC%97%90%EC%84%9C-exists-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-b3af4d387930&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/@bdv111/django%EC%97%90%EC%84%9C-exists-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-b3af4d387930&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;물론, 이후에 동일한 QuerySet을 결국 evaluate하여 사용해야하는 코드가 뒤따른다면, exists()를 사용하는 것은 오히려 불필요한 query를 하나 더 만들어내는 것일 수 있습니다. 동일한 QuerySet이 어차피 뒤에서 evaluate될 것이라면, 차라리 바로 위처럼 if 문 시점에 미리 evaluate 되게 하고 이를 caching하여 사용하는 것이 더 효율적일 것입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4793&quot; data-origin-height=&quot;3820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NY78R/btrJ2l6ZsAv/cUWfZ0KGr3CM1EAh7QJtm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NY78R/btrJ2l6ZsAv/cUWfZ0KGr3CM1EAh7QJtm1/img.jpg&quot; data-alt=&quot;망망대해 보트 보여요?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NY78R/btrJ2l6ZsAv/cUWfZ0KGr3CM1EAh7QJtm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNY78R%2FbtrJ2l6ZsAv%2FcUWfZ0KGr3CM1EAh7QJtm1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4793&quot; height=&quot;3820&quot; data-origin-width=&quot;4793&quot; data-origin-height=&quot;3820&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;망망대해 보트 보여요?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Lewis Ashton님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/13041243/&quot;&gt;https://www.pexels.com/ko-kr/photo/13041243/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>EXISTS</category>
      <category>ORM</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/501</guid>
      <comments>https://bthinkr.tistory.com/501#entry501comment</comments>
      <pubDate>Fri, 19 Aug 2022 08:20:01 +0900</pubDate>
    </item>
    <item>
      <title>PyQT - horizontalSpacer 나 verticalSpacer 쓸 때 sizeHint 값</title>
      <link>https://bthinkr.tistory.com/500</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;horizontalSpacer 나 verticalSpacer 컴포넌트를 그냥 가져다 놓으면 일정 수준의 사이즈 값이 들어와 있다. 40*20 인가 그랬는데, 그것도 일정 사이즈를 잡고 있는 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 쓰는 이유는 공란이 생길때 딱 컴포넌트를 모으기 위함이지 스페이서 자체에 길이를 줄 요량이 아니었으므로, 이 부분을 꼭 체크해서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sizeHint 값을 0x0 으로 주도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cezrUb/btrJKt4Z5zI/9EyzQHlzTcKsdK6BLbXpN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cezrUb/btrJKt4Z5zI/9EyzQHlzTcKsdK6BLbXpN1/img.png&quot; data-alt=&quot;spacer 의 sizeHint 값조정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cezrUb/btrJKt4Z5zI/9EyzQHlzTcKsdK6BLbXpN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcezrUb%2FbtrJKt4Z5zI%2F9EyzQHlzTcKsdK6BLbXpN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;404&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;spacer 의 sizeHint 값조정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>PyQt</category>
      <category>PyQt5</category>
      <category>PySide2</category>
      <category>sizeHint</category>
      <category>spacer</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/500</guid>
      <comments>https://bthinkr.tistory.com/500#entry500comment</comments>
      <pubDate>Mon, 15 Aug 2022 10:43:56 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 - 함수에 넘겨주는 인자들이 call by reference ?</title>
      <link>https://bthinkr.tistory.com/499</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬이란 언어가 엄청 간단하고 쉽다. 그리고 변수도 막 넘기고, 배열, dict, list, 이런것도 대충 막쓴다. 그러다 난 생각이 넘겨주고 받을때 복사되는지 C언어처럼 reference 주소를 넘겨주는 방법이 있는지 등등이 궁금한데... 그냥 쓰다고 좋은 글이 있어 소개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;a href=&quot;https://eslife.tistory.com/1053&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://eslife.tistory.com/1053&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1659342818722&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[파이썬] 함수 호출 CALL BY VALUE/CALL BY REFERENCE&quot; data-og-description=&quot;파이썬에서 함수 호출 시 call by value/ref 를 설명하는 간단한 예제입니다 1. bool, 문자열, 숫자, 리스트, 딕셔너리를 함수에서 변경했을 때 def testFunc2(bValue, sString, nValue, list, dic): bValue = Tr..&quot; data-og-host=&quot;eslife.tistory.com&quot; data-og-source-url=&quot;https://eslife.tistory.com/1053&quot; data-og-url=&quot;https://eslife.tistory.com/1053&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xubPD/hyPhAcCJjV/5EjZHXKUGLcjTWlhhgSC41/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302,https://scrap.kakaocdn.net/dn/irYH3/hyPhucnBrN/58EbHPk8PmIFWXmWxitXB0/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302,https://scrap.kakaocdn.net/dn/b6UNlC/hyPhnK9hmR/CLv1SCQz8dI1JemryEuex1/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302&quot;&gt;&lt;a href=&quot;https://eslife.tistory.com/1053&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://eslife.tistory.com/1053&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xubPD/hyPhAcCJjV/5EjZHXKUGLcjTWlhhgSC41/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302,https://scrap.kakaocdn.net/dn/irYH3/hyPhucnBrN/58EbHPk8PmIFWXmWxitXB0/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302,https://scrap.kakaocdn.net/dn/b6UNlC/hyPhnK9hmR/CLv1SCQz8dI1JemryEuex1/img.png?width=356&amp;amp;height=302&amp;amp;face=0_0_356_302');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[파이썬] 함수 호출 CALL BY VALUE/CALL BY REFERENCE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬에서 함수 호출 시 call by value/ref 를 설명하는 간단한 예제입니다 1. bool, 문자열, 숫자, 리스트, 딕셔너리를 함수에서 변경했을 때 def testFunc2(bValue, sString, nValue, list, dic): bValue = Tr..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;eslife.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꼭 읽어 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;간단한 int, float, bool 변수들을 넘길때는 복사가 되는 것 같고,&amp;nbsp;&lt;u&gt;&lt;b&gt;약간 포인터 개념이 들어가야 하는 배열, 리스트, 딕셔너리 등등은 주소 자체가 넘어가는것 같다&lt;/b&gt;&lt;/u&gt;. 즉 넘겨준 변수에 값이 실제로 바뀐다는 것!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제는 위의 소개한 페이지에 들어가서 읽어보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/APmAZ/btrII2m8yOE/VJMsI17lkpQks2kgzZotWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/APmAZ/btrII2m8yOE/VJMsI17lkpQks2kgzZotWK/img.jpg&quot; data-alt=&quot;아이고 복잡해라. 원리를 알아야지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/APmAZ/btrII2m8yOE/VJMsI17lkpQks2kgzZotWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAPmAZ%2FbtrII2m8yOE%2FVJMsI17lkpQks2kgzZotWK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이고 복잡해라. 원리를 알아야지&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Roxanne Shewchuk님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/2184600/&quot;&gt;https://www.pexels.com/ko-kr/photo/2184600/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>기초</category>
      <category>리스트</category>
      <category>매개변수</category>
      <category>배열</category>
      <category>인자</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>포인터</category>
      <category>함수</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/499</guid>
      <comments>https://bthinkr.tistory.com/499#entry499comment</comments>
      <pubDate>Mon, 1 Aug 2022 17:38:27 +0900</pubDate>
    </item>
    <item>
      <title>파일 SHA-256 해시 값 생성하기</title>
      <link>https://bthinkr.tistory.com/498</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;해시코드 (해쉬코드) 머든 생성해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬은 머든 어렵지 않네, hashlib 를 import 하고 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/hashlib.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/3/library/hashlib.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658887182233&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;hashlib &amp;mdash; Secure hashes and message digests &amp;mdash; Python 3.10.5 documentation&quot; data-og-description=&quot;hashlib &amp;mdash; Secure hashes and message digests Source code: Lib/hashlib.py This module implements a common interface to many different secure hash and message digest algorithms. Included are the FIPS secure hash algorithms SHA1, SHA224, SHA256, SHA384, and &quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/3/library/hashlib.html&quot; data-og-url=&quot;https://docs.python.org/3/library/hashlib.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ipXsP/hyPeHhSHTU/aul9s68zhPYPw6YLSjdMM1/img.png?width=500&amp;amp;height=320&amp;amp;face=0_0_500_320&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/hashlib.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/3/library/hashlib.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ipXsP/hyPeHhSHTU/aul9s68zhPYPw6YLSjdMM1/img.png?width=500&amp;amp;height=320&amp;amp;face=0_0_500_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;hashlib &amp;mdash; Secure hashes and message digests &amp;mdash; Python 3.10.5 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;hashlib &amp;mdash; Secure hashes and message digests Source code: Lib/hashlib.py This module implements a common interface to many different secure hash and message digest algorithms. Included are the FIPS secure hash algorithms SHA1, SHA224, SHA256, SHA384, and&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre class=&quot;taggerscript&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import hashlib
&amp;gt;&amp;gt;&amp;gt; m = hashlib.sha256()
&amp;gt;&amp;gt;&amp;gt; m.update(b&quot;Nobody inspects&quot;)
&amp;gt;&amp;gt;&amp;gt; m.update(b&quot; the spammish repetition&quot;)
&amp;gt;&amp;gt;&amp;gt; m.digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
&amp;gt;&amp;gt;&amp;gt; m.digest_size
32
&amp;gt;&amp;gt;&amp;gt; m.block_size
64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hashlib.sha256() 으로 객체 하나 만들고, 이 객체에 원하는 데이터(혹은 파일내용)을 update() 로 호출해 주면 끝이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 해시값은 digest() 로 바이트배열값을 가져와도 되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력하고 싶다면 print 함수가 따로 있네, 아래 코드 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;m.hexdigest()
print(&quot;hash:&quot;, m.digest())
print(&quot;파일해쉬값:&quot;, m.hexdigest())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예제는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hash:&amp;nbsp;b'T\xbd\x16h\x96N.dp6\xdeE\xcb\xdf\xe7\x13+\x9c[\xde\x7f\xea\xd7\xec\xa0z\xe39\xea\xc4\x1bK' &lt;br /&gt;파일해쉬값:&amp;nbsp;54bd1668964e2e647036de45cbdfe7132b9c5bde7fead7eca07ae339eac41b4b&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVviVF/btrIkpbQJ5U/d3AAXZiX6KlIkqeVwNLNZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVviVF/btrIkpbQJ5U/d3AAXZiX6KlIkqeVwNLNZ0/img.jpg&quot; data-alt=&quot;요즘은 이런기분 머 찾는게 라이브러리...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVviVF/btrIkpbQJ5U/d3AAXZiX6KlIkqeVwNLNZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVviVF%2FbtrIkpbQJ5U%2Fd3AAXZiX6KlIkqeVwNLNZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;750&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;요즘은 이런기분 머 찾는게 라이브러리...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Ekrulila님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/4102712/&quot;&gt;https://www.pexels.com/ko-kr/photo/4102712/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>hash</category>
      <category>hashlib</category>
      <category>SHA256</category>
      <category>파이썬</category>
      <category>해쉬</category>
      <category>해쉬값</category>
      <category>해시</category>
      <category>해시값</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/498</guid>
      <comments>https://bthinkr.tistory.com/498#entry498comment</comments>
      <pubDate>Wed, 27 Jul 2022 11:16:28 +0900</pubDate>
    </item>
    <item>
      <title>Django ORM - update 와 get 처리 한번에</title>
      <link>https://bthinkr.tistory.com/497</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;카운터를 1 증가하고 얼마가 되었는지 다시 쿼리해서 읽어보면 한 쓰레드로 동작하는 경우에는 생각하는 대로 증가한 값을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 동시에 4개의 요청이 들어와 있는 상태에서 증가하는 것은 transaction.atomic 머 이런걸로 처리한다 하더라도 다시 쿼리 날려서 읽는 동안 여러놈이 증가를 시켰으면 읽은 값은 내가 증가한 값이 아니라 최종 값이 읽혀져서 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 udpate and get 을 한번에 하는게 좋은데, Django ORM의 update 는 리턴값이 그냥 id 값인듯 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;답은 있지 rawquery를 이요하는것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가쓰는 DB가 PostgreSQL 이니까 여기에 맞는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658317957676&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How to get and update Django object in one query?&quot; data-og-description=&quot;To optimize a lot my database I would like to make as less as possible any query. I'm trying to get an object, increment the field &amp;quot;count_limit&amp;quot; and make an If statement after on the Customer inst...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&quot; data-og-url=&quot;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oOozH/hyPaovW9G7/c592G9aXtXKab86OcaL3L1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/60026615/how-to-get-and-update-django-object-in-one-query&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oOozH/hyPaovW9G7/c592G9aXtXKab86OcaL3L1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to get and update Django object in one query?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;To optimize a lot my database I would like to make as less as possible any query. I'm trying to get an object, increment the field &quot;count_limit&quot; and make an If statement after on the Customer inst...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;query = 'UPDATE customer SET count_limit=(customer.count_limit + 1) WHERE customer.user_id=%s returning *'
updated_obj = Customer.objects.raw(query, [user.id])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 쉽지 여기서 리턴되는 rawqueryset 을 읽는 방법은 아래 글에서 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kblck.com/496&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.07.20 - [Django] - Django - rawqueryset 필드 접근&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658317989779&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Django - rawqueryset 필드 접근&quot; data-og-description=&quot;부득이하게 raw query 로 접근하는 경우가 있다. 이때 리턴되는 값은 일반 queryset 하고 좀 다른듯 암튼 필드 접근은 당연히 해야 하니깐, 받은 objs 가 리스트 형태로 저장되어 있어서 iteration 해서 값&quot; data-og-host=&quot;kblck.com&quot; data-og-source-url=&quot;https://kblck.com/496&quot; data-og-url=&quot;https://kblck.com/496&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/T48wW/hyParMYK0v/M39ktnLc0VAuKCFGJJSZKk/img.jpg?width=800&amp;amp;height=530&amp;amp;face=0_0_800_530,https://scrap.kakaocdn.net/dn/oMzmq/hyO8QOnrOI/G8HsJBzUuJKDy4nR8D9hFK/img.jpg?width=800&amp;amp;height=530&amp;amp;face=0_0_800_530,https://scrap.kakaocdn.net/dn/dihd38/hyO8ZR6spe/k3wBql7CHOKf3v5YToinzK/img.jpg?width=1132&amp;amp;height=750&amp;amp;face=0_0_1132_750&quot;&gt;&lt;a href=&quot;https://kblck.com/496&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kblck.com/496&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/T48wW/hyParMYK0v/M39ktnLc0VAuKCFGJJSZKk/img.jpg?width=800&amp;amp;height=530&amp;amp;face=0_0_800_530,https://scrap.kakaocdn.net/dn/oMzmq/hyO8QOnrOI/G8HsJBzUuJKDy4nR8D9hFK/img.jpg?width=800&amp;amp;height=530&amp;amp;face=0_0_800_530,https://scrap.kakaocdn.net/dn/dihd38/hyO8ZR6spe/k3wBql7CHOKf3v5YToinzK/img.jpg?width=1132&amp;amp;height=750&amp;amp;face=0_0_1132_750');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django - rawqueryset 필드 접근&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;부득이하게 raw query 로 접근하는 경우가 있다. 이때 리턴되는 값은 일반 queryset 하고 좀 다른듯 암튼 필드 접근은 당연히 해야 하니깐, 받은 objs 가 리스트 형태로 저장되어 있어서 iteration 해서 값&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kblck.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qmi0X/btrHNKPxSSW/8g2EC3t42VfegEvUAk59rK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qmi0X/btrHNKPxSSW/8g2EC3t42VfegEvUAk59rK/img.jpg&quot; data-alt=&quot;한잔해 원샷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qmi0X/btrHNKPxSSW/8g2EC3t42VfegEvUAk59rK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQmi0X%2FbtrHNKPxSSW%2F8g2EC3t42VfegEvUAk59rK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;한잔해 원샷&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Arthur Brognoli님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/2440528/&quot;&gt;https://www.pexels.com/ko-kr/photo/2440528/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>ORM</category>
      <category>query</category>
      <category>RAW</category>
      <category>rawqueryset</category>
      <category>sql</category>
      <category>update</category>
      <category>update_get</category>
      <category>수정</category>
      <category>쿼리</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/497</guid>
      <comments>https://bthinkr.tistory.com/497#entry497comment</comments>
      <pubDate>Wed, 20 Jul 2022 20:58:27 +0900</pubDate>
    </item>
    <item>
      <title>Django - rawqueryset 필드 접근</title>
      <link>https://bthinkr.tistory.com/496</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;부득이하게 raw query 로 접근하는 경우가 있다. 이때 리턴되는 값은 일반 queryset 하고 좀 다른듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 필드 접근은 당연히 해야 하니깐, 받은 objs 가 리스트 형태로 저장되어 있어서 iteration 해서 값을 가져와야 되는듯 아래 코드를 참고하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 구글링을 찾았지 ㅋㅋ 검색어가 먼지가 중요하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658312897504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;how to retrive values form RawQuerySet in django?&quot; data-og-description=&quot;my input query is query = &amp;quot;select * from tab1 left join tab2 on tab2.patient_id =tab1.patient_id ,tab3 left join tab4 on tab4.patient_id =tab3.patient_id&amp;quot; data = model_name.objects.raw(query) H...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&quot; data-og-url=&quot;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nIPzV/hyPaCgC7t1/NdkwyVpBDpBHGnRYh3yJj1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/20325168/how-to-retrive-values-form-rawqueryset-in-django&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nIPzV/hyPaCgC7t1/NdkwyVpBDpBHGnRYh3yJj1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;how to retrive values form RawQuerySet in django?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;my input query is query = &quot;select * from tab1 left join tab2 on tab2.patient_id =tab1.patient_id ,tab3 left join tab4 on tab4.patient_id =tab3.patient_id&quot; data = model_name.objects.raw(query) H...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1658312781524&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Tab(models.Model):
    field1 = models.BooleanField()
    field2 = models.PositiveIntegerField()

query = &quot;select * from app_name_tab&quot;
objs = Tab.objects.raw(query)
for obj in objs:
    print obj.field1, obj.field2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIXA8R/btrHL2b6ZR0/hxooRl7OCOiZwSZcjiGWeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIXA8R/btrHL2b6ZR0/hxooRl7OCOiZwSZcjiGWeK/img.jpg&quot; data-alt=&quot;날것으로도 먹어봐야징&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIXA8R/btrHL2b6ZR0/hxooRl7OCOiZwSZcjiGWeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIXA8R%2FbtrHL2b6ZR0%2FhxooRl7OCOiZwSZcjiGWeK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;750&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;날것으로도 먹어봐야징&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Lukas님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/618775/&quot;&gt;https://www.pexels.com/ko-kr/photo/618775/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>queryset</category>
      <category>RAW</category>
      <category>rawqueryset</category>
      <category>sql</category>
      <category>바로쿼리</category>
      <category>직접쿼리</category>
      <category>쿼리</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/496</guid>
      <comments>https://bthinkr.tistory.com/496#entry496comment</comments>
      <pubDate>Wed, 20 Jul 2022 20:37:44 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 - 쓰레드 lock</title>
      <link>https://bthinkr.tistory.com/495</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;여러 쓰레드에서 접근할 때 막는 방법, 찾아둔 거 저장 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예제는 flask 에서 gunicorn 으로 proxy 하면 work thread 가 동시에 뜰 수도 있는데, 공유 자원을 lock 해서 한놈만 접근하도록 하는 코드 인듯.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658232375563&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Sharing a lock between gunicorn workers&quot; data-og-description=&quot;Is there a good way to share a multiprocessing Lock between gunicorn workers? I am trying to write a json API with Flask. Some of the API calls will interact a python class that manages a running&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&quot; data-og-url=&quot;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Y01sF/hyO8O3it1h/1Bj3mszrjM206LzAhUai81/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/18213619/sharing-a-lock-between-gunicorn-workers&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Y01sF/hyO8O3it1h/1Bj3mszrjM206LzAhUai81/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Sharing a lock between gunicorn workers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Is there a good way to share a multiprocessing Lock between gunicorn workers? I am trying to write a json API with Flask. Some of the API calls will interact a python class that manages a running&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1658232363887&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# dummy.py
from multiprocessing import Lock
import time

lock = Lock()

def start():
    lock.acquire()

    # TODO do work
    for i in range(0,10):
        print &quot;did work %s&quot; % i
        time.sleep(1)

    lock.release()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 공부하기 전에 저장해두고, 나중에 정리하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFauG7/btrHJikn111/4gAVhoFkXIY6xLRBtbcio1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFauG7/btrHJikn111/4gAVhoFkXIY6xLRBtbcio1/img.jpg&quot; data-alt=&quot;눈이 몇개야 ㅋㅋ 혼동의 시작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFauG7/btrHJikn111/4gAVhoFkXIY6xLRBtbcio1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFauG7%2FbtrHJikn111%2F4gAVhoFkXIY6xLRBtbcio1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;눈이 몇개야 ㅋㅋ 혼동의 시작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Og Mpango님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/3267211/&quot;&gt;https://www.pexels.com/ko-kr/photo/3267211/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>Flask</category>
      <category>Gunicorn</category>
      <category>lock</category>
      <category>multiprocessing</category>
      <category>release</category>
      <category>동시접근</category>
      <category>락</category>
      <category>쓰레드</category>
      <category>접근제어</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/495</guid>
      <comments>https://bthinkr.tistory.com/495#entry495comment</comments>
      <pubDate>Tue, 19 Jul 2022 21:09:37 +0900</pubDate>
    </item>
    <item>
      <title>Django ORM Transaction</title>
      <link>https://bthinkr.tistory.com/494</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;transaction.atomic() 이 중요해서, 하나 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.doosikbae.com/146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.doosikbae.com/146&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658231700784&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Django DB Transaction 2편 - 명시적으로 transaction 활용하기. (feat. savepoint)&quot; data-og-description=&quot;Introduction 안녕하세요. 1편 Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS) Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_RE..&quot; data-og-host=&quot;blog.doosikbae.com&quot; data-og-source-url=&quot;https://blog.doosikbae.com/146&quot; data-og-url=&quot;https://blog.doosikbae.com/entry/Django-DB-Transaction-2%ED%8E%B8-%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C-transaction-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0-feat-savepoint&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sVh6u/hyO8Qz0Gci/KDUxK4f5GtaKCS9Yz6GcE0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bJNtov/hyO8R6LScZ/KBKw40fHh3k3pfKSjgryw1/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bgexcq/hyO8UPX2rE/ETevikxBzFZUgUTgMtE3OK/img.png?width=1394&amp;amp;height=634&amp;amp;face=0_0_1394_634&quot;&gt;&lt;a href=&quot;https://blog.doosikbae.com/146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.doosikbae.com/146&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sVh6u/hyO8Qz0Gci/KDUxK4f5GtaKCS9Yz6GcE0/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bJNtov/hyO8R6LScZ/KBKw40fHh3k3pfKSjgryw1/img.png?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bgexcq/hyO8UPX2rE/ETevikxBzFZUgUTgMtE3OK/img.png?width=1394&amp;amp;height=634&amp;amp;face=0_0_1394_634');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django DB Transaction 2편 - 명시적으로 transaction 활용하기. (feat. savepoint)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Introduction 안녕하세요. 1편 Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_REQUESTS) Django Transaction(트랜잭션) 1편 - Request와 DB Transaction 묶기(Feat. ATOMIC_RE..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.doosikbae.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1658231669917&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# O 추천하는 방법.
try:
    with transaction.atomic():
        # dummy query for example
        SharesTransfer.objects.create(amount=1, account_from_id=1, account_to_id=2, company_id=1)
        raise Exception('savepoint를 이용해서 일부분은 반영이 되었음!')
except Exception as e:
    print(e)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 row lock 에 대한 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658231719897&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django] Row Lock 동작방식&quot; data-og-description=&quot;장고 프레임워크에서 ORM의 row lock 테스트와 동작방식을 공유합니다.&quot; data-og-host=&quot;chrisjune-13837.medium.com&quot; data-og-source-url=&quot;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&quot; data-og-url=&quot;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqR7zU/hyO83lPCVA/4mTdGURpI4G8Gs5tQG3Ih0/img.png?width=891&amp;amp;height=507&amp;amp;face=0_0_891_507,https://scrap.kakaocdn.net/dn/bOlFVU/hyO8SxPVoc/h0ykT7F1rMxKKDyLktIL9k/img.png?width=891&amp;amp;height=507&amp;amp;face=0_0_891_507&quot;&gt;&lt;a href=&quot;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chrisjune-13837.medium.com/django-row-lock-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-a2e05bb0eb90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqR7zU/hyO83lPCVA/4mTdGURpI4G8Gs5tQG3Ih0/img.png?width=891&amp;amp;height=507&amp;amp;face=0_0_891_507,https://scrap.kakaocdn.net/dn/bOlFVU/hyO8SxPVoc/h0ykT7F1rMxKKDyLktIL9k/img.png?width=891&amp;amp;height=507&amp;amp;face=0_0_891_507');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Django] Row Lock 동작방식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;장고 프레임워크에서 ORM의 row lock 테스트와 동작방식을 공유합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chrisjune-13837.medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658231888532&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;DB Concurrency 어디까지 알고 있니&quot; data-og-description=&quot;django 개발자와 함께 알아가기&quot; data-og-host=&quot;techblog.yogiyo.co.kr&quot; data-og-source-url=&quot;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&quot; data-og-url=&quot;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDUGcM/hyO83F8tNC/1ydUtrRw9itZtB37BKPxA1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/blbbsy/hyO8ZRhuSp/s4dToDndpZkE6GFFrP4IA1/img.png?width=1400&amp;amp;height=1033&amp;amp;face=0_0_1400_1033,https://scrap.kakaocdn.net/dn/sbgWE/hyO8V9a2qy/KFVmyaILsWVCG0RcXKm23k/img.png?width=1400&amp;amp;height=1033&amp;amp;face=0_0_1400_1033&quot;&gt;&lt;a href=&quot;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://techblog.yogiyo.co.kr/db-concurrency-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%8C%EA%B3%A0-%EC%9E%88%EB%8B%88-559bfc4f59ee&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDUGcM/hyO83F8tNC/1ydUtrRw9itZtB37BKPxA1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/blbbsy/hyO8ZRhuSp/s4dToDndpZkE6GFFrP4IA1/img.png?width=1400&amp;amp;height=1033&amp;amp;face=0_0_1400_1033,https://scrap.kakaocdn.net/dn/sbgWE/hyO8V9a2qy/KFVmyaILsWVCG0RcXKm23k/img.png?width=1400&amp;amp;height=1033&amp;amp;face=0_0_1400_1033');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DB Concurrency 어디까지 알고 있니&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;django 개발자와 함께 알아가기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;techblog.yogiyo.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 추후 또 정리해 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpveO7/btrHEzOvgz1/S2ZKhkkNRvpSmRvMfgwFBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpveO7/btrHEzOvgz1/S2ZKhkkNRvpSmRvMfgwFBK/img.jpg&quot; data-alt=&quot;잘 잠궈두자. 약간 다른 의미이지만 머 잠구는 건 동일하니깐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpveO7/btrHEzOvgz1/S2ZKhkkNRvpSmRvMfgwFBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpveO7%2FbtrHEzOvgz1%2FS2ZKhkkNRvpSmRvMfgwFBK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 잠궈두자. 약간 다른 의미이지만 머 잠구는 건 동일하니깐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Markus Winkler님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/3828944/&quot;&gt;https://www.pexels.com/ko-kr/photo/3828944/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>atomic</category>
      <category>Django</category>
      <category>lock</category>
      <category>model</category>
      <category>ORM</category>
      <category>rowlock</category>
      <category>Transaction</category>
      <category>동시접근</category>
      <category>접근제어</category>
      <category>한번에수행</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/494</guid>
      <comments>https://bthinkr.tistory.com/494#entry494comment</comments>
      <pubDate>Tue, 19 Jul 2022 20:57:17 +0900</pubDate>
    </item>
    <item>
      <title>날짜 바꾸기 - date.replace 함수</title>
      <link>https://bthinkr.tistory.com/493</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아주 간단한 날짜 바꾸기도 검색해야 하다뉘. 좌절이지만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;date.replace 함수로 변경이 가능하다&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예제를 참고하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1658127185720&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from datetime import datetime
today = datetime.now()
newdate = today.replace(year=2022, month=1, hour=11, minute=59)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;5825&quot; data-origin-height=&quot;3883&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ntXqB/btrHDArband/VkNnzqQN9FPJxRnPLhMrJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ntXqB/btrHDArband/VkNnzqQN9FPJxRnPLhMrJk/img.jpg&quot; data-alt=&quot;시간변경이 replace 라니 직관적이 못하다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ntXqB/btrHDArband/VkNnzqQN9FPJxRnPLhMrJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FntXqB%2FbtrHDArband%2FVkNnzqQN9FPJxRnPLhMrJk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;5825&quot; height=&quot;3883&quot; data-origin-width=&quot;5825&quot; data-origin-height=&quot;3883&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시간변경이 replace 라니 직관적이 못하다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Karolina Grabowska님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/4016522/&quot;&gt;https://www.pexels.com/ko-kr/photo/4016522/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>DateTime</category>
      <category>replace</category>
      <category>날짜</category>
      <category>날짜함수</category>
      <category>시간변경</category>
      <category>시간함수</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/493</guid>
      <comments>https://bthinkr.tistory.com/493#entry493comment</comments>
      <pubDate>Mon, 18 Jul 2022 15:56:10 +0900</pubDate>
    </item>
    <item>
      <title>Django ORM - datetime 필드에서 특정 월, 특정 년 결과 가져오기</title>
      <link>https://bthinkr.tistory.com/492</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;특정일이나, 특정월에 대한 결과를 필터링 하고 싶을때, Model에서는 datetime 형태의 필드로 저장해 두었다면, 다음 예제를 참고하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첨에는 range로 조사해야 되나 생각했는데, 다행히 __month, __year, __day 이런 내장 키워드가 존재하고 있어 다행이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;orderitem_list.filter(date_due__month=cur_month,&amp;nbsp;date_due__year=cur_year)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고 프로젝트 홈의 문서에서도 찾아 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658120805302&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;QuerySet API reference | Django documentation | Django&quot; data-og-description=&quot;Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About &amp;hearts; Donate&quot; data-og-host=&quot;docs.djangoproject.com&quot; data-og-source-url=&quot;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&quot; data-og-url=&quot;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.djangoproject.com/en/4.0/ref/models/querysets/#month&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;QuerySet API reference | Django documentation | Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About &amp;hearts; Donate&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.djangoproject.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별거 아니지만 저장해둠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oWAcA/btrHDbZawm4/kRdA0r9PIuwttasoQKa7RK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oWAcA/btrHDbZawm4/kRdA0r9PIuwttasoQKa7RK/img.jpg&quot; data-alt=&quot;2021 다이어리, 시간 달력 이런게 참 필요한데 제어하는게 쉽지않네&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oWAcA/btrHDbZawm4/kRdA0r9PIuwttasoQKa7RK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoWAcA%2FbtrHDbZawm4%2FkRdA0r9PIuwttasoQKa7RK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2021 다이어리, 시간 달력 이런게 참 필요한데 제어하는게 쉽지않네&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Nataliya Vaitkevich님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/6863524/&quot;&gt;https://www.pexels.com/ko-kr/photo/6863524/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>DateTime</category>
      <category>Django</category>
      <category>ORM</category>
      <category>__day</category>
      <category>__month</category>
      <category>__year</category>
      <category>특정년</category>
      <category>특정월</category>
      <category>특정일</category>
      <category>필터</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/492</guid>
      <comments>https://bthinkr.tistory.com/492#entry492comment</comments>
      <pubDate>Mon, 18 Jul 2022 14:09:13 +0900</pubDate>
    </item>
    <item>
      <title>django logging permission error winerror 32 로깅 에러</title>
      <link>https://bthinkr.tistory.com/491</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그냥 기본 rotate 방식의 로깅 처리 RotatingFileHandler&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;를 이용하여 구현해 뒀다. 막상 용량이 차서 파일을 새로 만드는 순간 에러가 발생한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;permission error winerror 32&lt;br /&gt;[winerror&amp;nbsp;32]&amp;nbsp;다른&amp;nbsp;프로세스가&amp;nbsp;파일을&amp;nbsp;사용&amp;nbsp;중이기&amp;nbsp;때문에&amp;nbsp;프로세스가&amp;nbsp;액세스&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없습니다&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로깅 처리하는 방법은 아래 글을 참고하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kblck.com/483&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.05.18 - [Django] - Django - logging middleware 간단 버전&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누군가가 쓰고 있다고 파일을 생성해서 처리할 수 없다라고 뜬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 코딩이 없는 관계로 약간 당황, 머 그래도 구글링&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657782806395&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;djangoで「PermissionError: [WinError 32] プロセスはファイルにアクセスできません」エラー - プログラ&quot; data-og-description=&quot;未分類 djangoで「PermissionError: [WinError 32] プロセスはファイルにアクセスできません」エラー Windows10のVisual Studio Codeでdjangoのデバッグをしていたら、下記エラーが発生した。 command PermissionError:&quot; data-og-host=&quot;southsandstore.sakura.ne.jp&quot; data-og-source-url=&quot;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&quot; data-og-url=&quot;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://southsandstore.sakura.ne.jp/Programmer/django%E3%81%A7%E3%80%8Cpermissionerror-winerror-32-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;djangoで「PermissionError: [WinError 32] プロセスはファイルにアクセスできません」エラー - プログラ&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;未分類 djangoで「PermissionError: [WinError 32] プロセスはファイルにアクセスできません」エラー Windows10のVisual Studio Codeでdjangoのデバッグをしていたら、下記エラーが発生した。 command PermissionError:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;southsandstore.sakura.ne.jp&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결책은 아주 단순!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python manage.py runserver 할때 옵션을 하나 더 주면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;$ python manage.py runserver 0.0.0.0:8000 --noreload&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부에서 먼가 쓰레드인지 프로세스인지 로깅 처리를 위한 파일을 서로 잡고 있는 모냥인데 머 잘 몰라도 위의 --noreload 옵션만 주면 해결!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w4qMN/btrHiXU4A7F/KRFcWky70BQcuCk2joou90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w4qMN/btrHiXU4A7F/KRFcWky70BQcuCk2joou90/img.jpg&quot; data-alt=&quot;등대 별 노출 빛이 잘 돌아가네&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w4qMN/btrHiXU4A7F/KRFcWky70BQcuCk2joou90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw4qMN%2FbtrHiXU4A7F%2FKRFcWky70BQcuCk2joou90%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;등대 별 노출 빛이 잘 돌아가네&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Bahadir Yeniceri님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/6878939/&quot;&gt;https://www.pexels.com/ko-kr/photo/6878939/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>error</category>
      <category>logging</category>
      <category>noreload</category>
      <category>Rotate</category>
      <category>rotatefile</category>
      <category>RotatingFileHandler</category>
      <category>win32</category>
      <category>로깅</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/491</guid>
      <comments>https://bthinkr.tistory.com/491#entry491comment</comments>
      <pubDate>Thu, 14 Jul 2022 16:19:15 +0900</pubDate>
    </item>
    <item>
      <title>쿼리스트링 일부 수정해 보기</title>
      <link>https://bthinkr.tistory.com/489</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;장고에서 쿼리 스트링으로 전달되는 문자열을 수정해서 다시 보내려고 시도하려고 한다. 이런 쿼리스트링이 저장된다는 QueryDict 라는 놈은 변경이 되지 않네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 다른 객체로 복사하고, 수정/삭제/추가 등의 변경을 한다음&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;QueryDict.copy()&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Python&amp;nbsp;표준&amp;nbsp;라이브러리의&amp;nbsp;copy.deepcopy()를&amp;nbsp;사용하여&amp;nbsp;객체의&amp;nbsp;복제를&amp;nbsp;생성하여&amp;nbsp;리턴한다.&amp;nbsp;복제는&amp;nbsp;변경가능하므로&amp;nbsp;값을&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;출처:&amp;nbsp;&lt;a href=&quot;https://engineer-mole.tistory.com/121&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://engineer-mole.tistory.com/121&lt;/a&gt;&amp;nbsp;[매일&amp;nbsp;꾸준히,&amp;nbsp;더&amp;nbsp;깊이:티스토리]&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열로 변환해서 사용하면 된다. 다시 쿼리 문자열에 대입할 수 없고 걍 문자열 변수로 넘겨주고 템플릿에서 적당히 받아서 다시 처리하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 사용한 코드는 그냥 참고로 아래에 둔다. s_page 를 빼고 쿼리스트링을 만들고 싶었다.&lt;/p&gt;
&lt;pre id=&quot;code_1656394899288&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    # 페이지 기능 추가를 위해 querydict 에서 s_page는 뺀 문자열이 필요하다. 아니면 계속 s_page=xx 가 추가되어 중복된다.
    passing_querydict = request.GET.copy()
    if passing_querydict.get(&quot;s_page&quot;):
        passing_querydict.pop(&quot;s_page&quot;)
    passing_querydict = passing_querydict.urlencode(safe=None)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고사이트 - GET and POST parameters are immutable 이어서 수정,삭제가 안된다는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django#:~:text=You%20can%20not%20change%20these,then%20pop%20item%20from%20it.&amp;amp;text=The%20QueryDicts%20at%20request.&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django#:~:text=You%20can%20not%20change%20these,then%20pop%20item%20from%20it.&amp;amp;text=The%20QueryDicts%20at%20request.&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1656394968776&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How to remove key from request QueryDict in Django?&quot; data-og-description=&quot;Here is one of my Django views: def index(request): message = request.GET.get('message', '') context = RequestContext(request, { 'message': message }) return render(requ...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django#:~:text=You%20can%20not%20change%20these,then%20pop%20item%20from%20it.&amp;amp;text=The%20QueryDicts%20at%20request.&quot; data-og-url=&quot;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gtU7t/hyOURTHOA7/lbRrgADlwAR9CIyOGbBtdK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django#:~:text=You%20can%20not%20change%20these,then%20pop%20item%20from%20it.&amp;amp;text=The%20QueryDicts%20at%20request.&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/29492894/how-to-remove-key-from-request-querydict-in-django#:~:text=You%20can%20not%20change%20these,then%20pop%20item%20from%20it.&amp;amp;text=The%20QueryDicts%20at%20request.&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gtU7t/hyOURTHOA7/lbRrgADlwAR9CIyOGbBtdK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to remove key from request QueryDict in Django?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Here is one of my Django views: def index(request): message = request.GET.get('message', '') context = RequestContext(request, { 'message': message }) return render(requ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q6lJj/btrFUjUkRqx/WKGuU1SLIgMEn20ZhNlWF1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q6lJj/btrFUjUkRqx/WKGuU1SLIgMEn20ZhNlWF1/img.jpg&quot; data-alt=&quot;스트링에 매달린 이쁜 놈들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q6lJj/btrFUjUkRqx/WKGuU1SLIgMEn20ZhNlWF1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq6lJj%2FbtrFUjUkRqx%2FWKGuU1SLIgMEn20ZhNlWF1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스트링에 매달린 이쁜 놈들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 THIS IS ZUN님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/bokeh-1194025/&quot;&gt;https://www.pexels.com/ko-kr/photo/bokeh-1194025/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>deepcopy</category>
      <category>Django</category>
      <category>immutable</category>
      <category>querydict</category>
      <category>querystring</category>
      <category>request.GET</category>
      <category>request.POST</category>
      <category>백엔드</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/489</guid>
      <comments>https://bthinkr.tistory.com/489#entry489comment</comments>
      <pubDate>Tue, 28 Jun 2022 14:47:10 +0900</pubDate>
    </item>
    <item>
      <title>Jquery - 동일한 ID 가 여러개 있는 경우 click 이벤트 다 받기</title>
      <link>https://bthinkr.tistory.com/488</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 ID를 쓰고 있는 객체의 이벤트를 받아 처리할 때는 그냥&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(#사용중인ID).on('click', ....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 사용하면 맨 처음 객체만 반응하는 경우가 나타났다. 나만 그런가? ㅋㅋ 암튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디를 동일하게 사용해도 사용된 모든 객체에 이벤트를 발생하려면 아래와 같이 복수개를 처리할 수 있는 selector 형태로 불러 써야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(&quot;[id='사용중인ID']&quot;).on('click', function () { &lt;br /&gt;return confirm(&quot;Are you sure you want to delete?&quot;); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하지만 실수하기 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 페이지는 아래&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1656038742054&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How does jQuery work when there are multiple elements with the same ID value?&quot; data-og-description=&quot;I fetch data from Google's AdWords website which has multiple elements with the same id. Could you please explain why the following 3 queries doesn't result with the same answer (2)? Live Demo H...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&quot; data-og-url=&quot;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sBqEI/hyORF6TvsK/4aoKKe7M7kdL9PPdLJ0TC1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/8498579/how-does-jquery-work-when-there-are-multiple-elements-with-the-same-id-value&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sBqEI/hyORF6TvsK/4aoKKe7M7kdL9PPdLJ0TC1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How does jQuery work when there are multiple elements with the same ID value?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I fetch data from Google's AdWords website which has multiple elements with the same id. Could you please explain why the following 3 queries doesn't result with the same answer (2)? Live Demo H...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IiLWa/btrFDJcG98W/uMMYslBKNWOjRCaJwgwHI0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IiLWa/btrFDJcG98W/uMMYslBKNWOjRCaJwgwHI0/img.jpg&quot; data-alt=&quot;여름엔 수박! 싹다먹어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IiLWa/btrFDJcG98W/uMMYslBKNWOjRCaJwgwHI0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIiLWa%2FbtrFDJcG98W%2FuMMYslBKNWOjRCaJwgwHI0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여름엔 수박! 싹다먹어&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Tamanna Rumee님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/8755101/&quot;&gt;https://www.pexels.com/ko-kr/photo/8755101/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>frontend</category>
      <category>id</category>
      <category>javascript</category>
      <category>jquery</category>
      <category>multiple</category>
      <category>querySelectorAll</category>
      <category>selector</category>
      <category>웹개발</category>
      <category>제이쿼리</category>
      <category>프론트엔드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/488</guid>
      <comments>https://bthinkr.tistory.com/488#entry488comment</comments>
      <pubDate>Fri, 24 Jun 2022 11:48:44 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 yaml 파일 쓰기에 한글 문제</title>
      <link>https://bthinkr.tistory.com/487</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;한글이 잘 안되는 경우가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니코드로 저장되어 버려서 이게 한글인지 코드인지 구분이 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 파일 오픈할때는 encoding 옵션을 꼭 주고,&lt;/p&gt;
&lt;pre id=&quot;code_1655423195516&quot; class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;f = open('test.txt','w', encoding='utf-8')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dump 호출 할때 아래와 같이 하면 해결!&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;dump 옵션에 allow_unicode=True&amp;nbsp;옵션 추가&lt;br /&gt;yaml.dump(test,&amp;nbsp;outfile,&amp;nbsp;default_flow_style=False,&amp;nbsp;&lt;b&gt;allow_unicode=True&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devgwang.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://devgwang.tistory.com/4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655423153896&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;pyyaml 모듈&quot; data-og-description=&quot;pyyaml은 파이썬에서 yaml 양식을 가진 파일을 다룰 때 사용하는 모듈이다. 공식 사이트는&amp;nbsp;Python - PyYaml Module&amp;nbsp;이며, 사용 가이드 및 버전 정보를 제공해주고 있다.! 1. 소스 사용 방법 먼저, 개발하고&quot; data-og-host=&quot;devgwang.tistory.com&quot; data-og-source-url=&quot;https://devgwang.tistory.com/4&quot; data-og-url=&quot;https://devgwang.tistory.com/4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mcBY1/hyONFELTKi/ydM9zWfL78Rk39vQs0hkk1/img.png?width=773&amp;amp;height=120&amp;amp;face=0_0_773_120,https://scrap.kakaocdn.net/dn/fjgi7/hyONRLYfeP/mmgQOWuuKaaTWn2q3ob3Tk/img.png?width=773&amp;amp;height=120&amp;amp;face=0_0_773_120&quot;&gt;&lt;a href=&quot;https://devgwang.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devgwang.tistory.com/4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mcBY1/hyONFELTKi/ydM9zWfL78Rk39vQs0hkk1/img.png?width=773&amp;amp;height=120&amp;amp;face=0_0_773_120,https://scrap.kakaocdn.net/dn/fjgi7/hyONRLYfeP/mmgQOWuuKaaTWn2q3ob3Tk/img.png?width=773&amp;amp;height=120&amp;amp;face=0_0_773_120');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;pyyaml 모듈&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;pyyaml은 파이썬에서 yaml 양식을 가진 파일을 다룰 때 사용하는 모듈이다. 공식 사이트는&amp;nbsp;Python - PyYaml Module&amp;nbsp;이며, 사용 가이드 및 버전 정보를 제공해주고 있다.! 1. 소스 사용 방법 먼저, 개발하고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devgwang.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #343a40;&quot;&gt;참고로, json dump 에서는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #343a40;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #343a40;&quot;&gt;&lt;a href=&quot;https://datamod.tistory.com/104&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://datamod.tistory.com/104&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655423174979&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python] json.dumps() 이용시 한글이 유니코드로 저장되는 현상 해결&quot; data-og-description=&quot;파일 입출력을 할 때 사전타입을 키:값으로 입력하는 방법에 대해서 1. str(dict) 을 사용하는 방법 2. json 모듈을 이용하는 방법 1번은 아주 쉬운 방법이라 금방 성공했지만 2번의 경우 파일을 파이&quot; data-og-host=&quot;datamod.tistory.com&quot; data-og-source-url=&quot;https://datamod.tistory.com/104&quot; data-og-url=&quot;https://datamod.tistory.com/104&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buqfAn/hyOMGL3t8q/OzyZLGIa1rPno6nKOI3h31/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bZ83sk/hyOMLGCoCs/LHl2c66t1TG80wi7ogxzi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://datamod.tistory.com/104&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://datamod.tistory.com/104&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buqfAn/hyOMGL3t8q/OzyZLGIa1rPno6nKOI3h31/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bZ83sk/hyOMLGCoCs/LHl2c66t1TG80wi7ogxzi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Python] json.dumps() 이용시 한글이 유니코드로 저장되는 현상 해결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파일 입출력을 할 때 사전타입을 키:값으로 입력하는 방법에 대해서 1. str(dict) 을 사용하는 방법 2. json 모듈을 이용하는 방법 1번은 아주 쉬운 방법이라 금방 성공했지만 2번의 경우 파일을 파이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;datamod.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;.dumps() 메서드를 쓸 때 ensure_ascii = False 를 입력하면 정상적으로 입력이 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CGUCi/btrEX7sKbZI/wqXLmghMCQyTTJtRYbaxNk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CGUCi/btrEX7sKbZI/wqXLmghMCQyTTJtRYbaxNk/img.jpg&quot; data-alt=&quot;언젠가 해는 떠오른다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CGUCi/btrEX7sKbZI/wqXLmghMCQyTTJtRYbaxNk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCGUCi%2FbtrEX7sKbZI%2FwqXLmghMCQyTTJtRYbaxNk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;언젠가 해는 떠오른다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Sebastian Voortman님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/189349/&quot;&gt;https://www.pexels.com/ko-kr/photo/189349/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>dump</category>
      <category>JSON</category>
      <category>unicode</category>
      <category>utf8</category>
      <category>yaml</category>
      <category>파이썬</category>
      <category>한글</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/487</guid>
      <comments>https://bthinkr.tistory.com/487#entry487comment</comments>
      <pubDate>Thu, 23 Jun 2022 11:47:58 +0900</pubDate>
    </item>
    <item>
      <title>QTableWidget 에 문자열 정렬하기</title>
      <link>https://bthinkr.tistory.com/486</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;매번 찾아 보는게 귀찮어 필요한 내용은 정리해 둔다. 출처를 분명히 밝혀둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wikidocs.net/36797&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wikidocs.net/36797&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655275412467&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;7.3 QTableWidget&quot; data-og-description=&quot;&amp;#96;QTableWidget&amp;#96;을 사용할 때는 미리 행과 열 크기를 지정하고 아이템을 삽입한다. 행과 행과 열의 크기는 생성자에서 지정할 수도 있고, &amp;#96;setRowCount(ro ...&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/36797&quot; data-og-url=&quot;https://wikidocs.net/36797&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/D07kH/hyOK7Qzmy6/SKrroo2ABOm93aY6kyF9CK/img.png?width=416&amp;amp;height=433&amp;amp;face=0_0_416_433,https://scrap.kakaocdn.net/dn/PnxSx/hyOLfOz4IJ/3Z9ZK2Q4mI8shQl0gIVUfk/img.png?width=286&amp;amp;height=289&amp;amp;face=0_0_286_289&quot;&gt;&lt;a href=&quot;https://wikidocs.net/36797&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/36797&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/D07kH/hyOK7Qzmy6/SKrroo2ABOm93aY6kyF9CK/img.png?width=416&amp;amp;height=433&amp;amp;face=0_0_416_433,https://scrap.kakaocdn.net/dn/PnxSx/hyOLfOz4IJ/3Z9ZK2Q4mI8shQl0gIVUfk/img.png?width=286&amp;amp;height=289&amp;amp;face=0_0_286_289');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;7.3 QTableWidget&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;`QTableWidget`을 사용할 때는 미리 행과 열 크기를 지정하고 아이템을 삽입한다. 행과 행과 열의 크기는 생성자에서 지정할 수도 있고, `setRowCount(ro ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1655275312496&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;table = QTableWidget(6,3)
table.setAlternatingRowColors(true)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
for i=0 in range(table.rowCount()):
  for j=0 in range(table-&amp;gt;columnCount()):
    item = QTableWidgetItem()
    text = &quot;({},{})&quot;.format(i).format(j) 
    item.setText(text)
    item.setTextAlignment(Qt.AlignCenter)
    table.setItem(i,j,item)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;item.setTextAlignment(Qt.AlignCenter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight) 가운데 오른쪽 정렬&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 옵션 값은 아래 페이지에도 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://doc.qt.io/qt-6/qt.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://doc.qt.io/qt-6/qt.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The horizontal flags are:&lt;/p&gt;
&lt;div&gt;ConstantValueDescription
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignLeft&lt;/td&gt;
&lt;td&gt;0x0001&lt;/td&gt;
&lt;td&gt;Aligns with the left edge.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignRight&lt;/td&gt;
&lt;td&gt;0x0002&lt;/td&gt;
&lt;td&gt;Aligns with the right edge.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignHCenter&lt;/td&gt;
&lt;td&gt;0x0004&lt;/td&gt;
&lt;td&gt;Centers horizontally in the available space.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignJustify&lt;/td&gt;
&lt;td&gt;0x0008&lt;/td&gt;
&lt;td&gt;Justifies the text in the available space.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The vertical flags are:&lt;/p&gt;
&lt;div&gt;ConstantValueDescription
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignTop&lt;/td&gt;
&lt;td&gt;0x0020&lt;/td&gt;
&lt;td&gt;Aligns with the top.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignBottom&lt;/td&gt;
&lt;td&gt;0x0040&lt;/td&gt;
&lt;td&gt;Aligns with the bottom.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignVCenter&lt;/td&gt;
&lt;td&gt;0x0080&lt;/td&gt;
&lt;td&gt;Centers vertically in the available space.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt::AlignBaseline&lt;/td&gt;
&lt;td&gt;0x0100&lt;/td&gt;
&lt;td&gt;Aligns with the baseline.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKjOCe/btrESQX091S/mkgdbq7yF2yjIXhs1OJLHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKjOCe/btrESQX091S/mkgdbq7yF2yjIXhs1OJLHK/img.jpg&quot; data-alt=&quot;이쁜 차들이네&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKjOCe/btrESQX091S/mkgdbq7yF2yjIXhs1OJLHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKjOCe%2FbtrESQX091S%2Fmkgdbq7yF2yjIXhs1OJLHK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이쁜 차들이네&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Photo by Jose Mueses from Pexels: &lt;a href=&quot;https://www.pexels.com/photo/photo-of-five-cars-parked-1280560/&quot;&gt;https://www.pexels.com/photo/photo-of-five-cars-parked-1280560/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/파이썬</category>
      <category>QT</category>
      <category>QTableWidget</category>
      <category>qtablewidgetitem</category>
      <category>setItem</category>
      <category>SetText</category>
      <category>setTextAlignment</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/486</guid>
      <comments>https://bthinkr.tistory.com/486#entry486comment</comments>
      <pubDate>Wed, 15 Jun 2022 15:44:29 +0900</pubDate>
    </item>
    <item>
      <title>Django - Redirect to a url with query string in Django</title>
      <link>https://bthinkr.tistory.com/485</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;redirect 를 하는데 쿼리 스트링을 같이 넘기고 싶을때, 이 간단한 것도 찾아봐야 하나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 reverse 를 이용해서 아래처럼 하면 해결이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;return redirect(reverse_lazy(&quot;devices:page&quot;, kwargs={&quot;pk&quot;: pval}) + &quot;?&quot; + request.GET.urlencode())&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고한 사이트 주소는 여기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653542435510&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Redirect to a url with query string in Django&quot; data-og-description=&quot;How can I go to a specific URL with parameters like if I have view def search(request): and in urls.py ^search/$ and what I need to do is to redirect like search/?item=4 c = {} render_to_response(&amp;amp;&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&quot; data-og-url=&quot;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/k8CWv/hyOypWgP34/grLXqU2XjUOVhCFiIYJTLk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/19784810/redirect-to-a-url-with-query-string-in-django&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/k8CWv/hyOypWgP34/grLXqU2XjUOVhCFiIYJTLk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Redirect to a url with query string in Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How can I go to a specific URL with parameters like if I have view def search(request): and in urls.py ^search/$ and what I need to do is to redirect like search/?item=4 c = {} render_to_response(&amp;amp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 끝.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oIsVG/btrDapIVYnm/8piwkKakkkBzedInRDf1v0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oIsVG/btrDapIVYnm/8piwkKakkkBzedInRDf1v0/img.jpg&quot; data-alt=&quot;션한 바다로 여행가쟝&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oIsVG/btrDapIVYnm/8piwkKakkkBzedInRDf1v0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoIsVG%2FbtrDapIVYnm%2F8piwkKakkkBzedInRDf1v0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;션한 바다로 여행가쟝&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pexels에서 Artem Beliaikin님의 사진: &lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1103511/&quot;&gt;https://www.pexels.com/ko-kr/photo/1103511/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>GET</category>
      <category>querystring</category>
      <category>Redirect</category>
      <category>request</category>
      <category>Reverse</category>
      <category>URLEncode</category>
      <category>백엔드</category>
      <category>쿼리스트링</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/485</guid>
      <comments>https://bthinkr.tistory.com/485#entry485comment</comments>
      <pubDate>Thu, 26 May 2022 14:25:30 +0900</pubDate>
    </item>
    <item>
      <title>Django - CSRF token error - 장고 4 이상에서</title>
      <link>https://bthinkr.tistory.com/484</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Django 4 버전 이상에서 CSRF 체크하는 부분이 좀 더 엄격하게 되어 있다는 사실을 에러가 나면 알게된다. 이전에 아무 문제 없이 잘 돌았는데, 새로 설치하다 보니 장고가 최신버전으로 설치되고, 잘 동작하던 웹 서비스가 갑자기 CSRF 에러를 발생시키며 404 에러 등을 찍는다....이러면 이렇게 수정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://not-to-be-reset.tistory.com/552&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://not-to-be-reset.tistory.com/552&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653291658196&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;CSRF 토큰 오류&quot; data-og-description=&quot;에러 내용 django 에서 DEBUG 옵션을 True로 둔 뒤, POST 요청을 보내면 아래와 같이 에러 내용이 출력된다. 1. 웹 브라우저에서 접속 시 403 error CSRF verification failed. Request aborted 2. django log For..&quot; data-og-host=&quot;not-to-be-reset.tistory.com&quot; data-og-source-url=&quot;https://not-to-be-reset.tistory.com/552&quot; data-og-url=&quot;https://not-to-be-reset.tistory.com/552&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bM17y6/hyOvO3gwOq/JOgYCp6B8SsB2AZdEmDpPK/img.png?width=431&amp;amp;height=122&amp;amp;face=0_0_431_122,https://scrap.kakaocdn.net/dn/3OMQr/hyOvJOqMqe/UoGqFLwRWcVZyfVsChPtMK/img.png?width=431&amp;amp;height=122&amp;amp;face=0_0_431_122,https://scrap.kakaocdn.net/dn/gZaYd/hyOvUPXQGH/AIkV5v7PWTjOhaPEpoeU4k/img.jpg?width=2000&amp;amp;height=2000&amp;amp;face=846_531_1211_927&quot;&gt;&lt;a href=&quot;https://not-to-be-reset.tistory.com/552&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://not-to-be-reset.tistory.com/552&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bM17y6/hyOvO3gwOq/JOgYCp6B8SsB2AZdEmDpPK/img.png?width=431&amp;amp;height=122&amp;amp;face=0_0_431_122,https://scrap.kakaocdn.net/dn/3OMQr/hyOvJOqMqe/UoGqFLwRWcVZyfVsChPtMK/img.png?width=431&amp;amp;height=122&amp;amp;face=0_0_431_122,https://scrap.kakaocdn.net/dn/gZaYd/hyOvUPXQGH/AIkV5v7PWTjOhaPEpoeU4k/img.jpg?width=2000&amp;amp;height=2000&amp;amp;face=846_531_1211_927');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CSRF 토큰 오류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;에러 내용 django 에서 DEBUG 옵션을 True로 둔 뒤, POST 요청을 보내면 아래와 같이 에러 내용이 출력된다. 1. 웹 브라우저에서 접속 시 403 error CSRF verification failed. Request aborted 2. django log For..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;not-to-be-reset.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;settings.py 에 CSRF_TRUSTED_ORIGINS 옵션을 보강해 주면 된다. 도메인이 있으면 수월하고 없으면 직접 IP 주소들을 입력해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;ALLOWED_HOSTS = ['도메인명', 'IP address', ...] &lt;br /&gt;CSRF_TRUSTED_ORIGINS = ['허용도메인(서비스도메인)']&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 팁만 정리해둠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래글도 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653291774587&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CSRF validation does not work on Django using HTTPS&quot; data-og-description=&quot;I am developing an application which the frontend is an AngularJS API that makes requests to the backend API developed in Django Rest Framework. The frontend is on the domain: https://front.bluem...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&quot; data-og-url=&quot;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/f5Mjk/hyOunM0ZIZ/X6l7SZmfNBpFGJ41ABNAi1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/38841109/csrf-validation-does-not-work-on-django-using-https&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/f5Mjk/hyOunM0ZIZ/X6l7SZmfNBpFGJ41ABNAi1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CSRF validation does not work on Django using HTTPS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am developing an application which the frontend is an AngularJS API that makes requests to the backend API developed in Django Rest Framework. The frontend is on the domain: https://front.bluem...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsEbDw/btrCQ63SRCq/2pISXZ1T5e0xMSUxAKLnsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsEbDw/btrCQ63SRCq/2pISXZ1T5e0xMSUxAKLnsk/img.jpg&quot; data-alt=&quot;기능인지 버그인지 헷갈려 에공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsEbDw/btrCQ63SRCq/2pISXZ1T5e0xMSUxAKLnsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsEbDw%2FbtrCQ63SRCq%2F2pISXZ1T5e0xMSUxAKLnsk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기능인지 버그인지 헷갈려 에공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@realtoughcandy?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;RealToughCandy.com&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/11035537/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>ALLOWED_HOSTS</category>
      <category>CSRF</category>
      <category>CSRF_TRUSTED_ORIGINS</category>
      <category>Django</category>
      <category>백엔드</category>
      <category>보안</category>
      <category>업데이트</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/484</guid>
      <comments>https://bthinkr.tistory.com/484#entry484comment</comments>
      <pubDate>Mon, 23 May 2022 16:44:59 +0900</pubDate>
    </item>
    <item>
      <title>Django - logging middleware 간단 버전</title>
      <link>https://bthinkr.tistory.com/483</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;로그 기능을 넣기는 해야 겠다. 콘솔로 계속 띄워서 볼 수 는 없으니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미들웨어 기능으로 모든 request 를 로그를 저장해 보자고 맘 먹고 막 찾기 일단 구현된 결과는 아래 참고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, settings 에 로그 기능에 대한 설정을 해 둬야 한다. 여러군데 참고하는 중 젤 많이 보는 Pybo 게시판 쪽의 글을 가져와서 맞춰서 쓰기로 함&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://wikidocs.net/77522&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wikidocs.net/77522&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성한 코드는 아래와 같다. 아래 코드에서 파일로 저장하는 부분에 주목해서 보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;(먼저 작업 폴더에 logs 라는 폴더를 수동으로 하나 만들어 둬야 한다)&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1652831915996&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LOGGING = {
    &quot;version&quot;: 1,
    &quot;disable_existing_loggers&quot;: False,
    &quot;filters&quot;: {
        &quot;require_debug_false&quot;: {
            &quot;()&quot;: &quot;django.utils.log.RequireDebugFalse&quot;,
        },
        &quot;require_debug_true&quot;: {
            &quot;()&quot;: &quot;django.utils.log.RequireDebugTrue&quot;,
        },
    },
    &quot;formatters&quot;: {
        &quot;django.server&quot;: {
            &quot;()&quot;: &quot;django.utils.log.ServerFormatter&quot;,
            &quot;format&quot;: &quot;[{server_time}] {message}&quot;,
            &quot;style&quot;: &quot;{&quot;,
        },
        &quot;standard&quot;: {
            &quot;format&quot;: &quot;[%(asctime)s] [%(levelname)s] : %(message)s&quot;,
            &quot;datefmt&quot;: &quot;%d-%b-%Y %H:%M:%S&quot;,
        },
        &quot;format1&quot;: {
            &quot;format&quot;: &quot;[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s&quot;,
            &quot;datefmt&quot;: &quot;%d/%b/%Y %H:%M:%S&quot;,
        },
        &quot;format2&quot;: {
            &quot;format&quot;: &quot;[%(levelname)s] %(message)s&quot;,
        },
    },
    &quot;handlers&quot;: {
        &quot;console&quot;: {
            &quot;level&quot;: &quot;INFO&quot;,
            &quot;filters&quot;: [&quot;require_debug_true&quot;],
            &quot;class&quot;: &quot;logging.StreamHandler&quot;,
        },
        &quot;django.server&quot;: {
            &quot;level&quot;: &quot;INFO&quot;,
            &quot;class&quot;: &quot;logging.StreamHandler&quot;,
            &quot;formatter&quot;: &quot;django.server&quot;,
        },
        &quot;mail_admins&quot;: {&quot;level&quot;: &quot;ERROR&quot;, &quot;filters&quot;: [&quot;require_debug_false&quot;], &quot;class&quot;: &quot;django.utils.log.AdminEmailHandler&quot;},
        &quot;file&quot;: {
            &quot;level&quot;: &quot;INFO&quot;,
            &quot;encoding&quot;: &quot;utf-8&quot;,
            &quot;filters&quot;: [&quot;require_debug_false&quot;],  # DEBUG=FALSE 일때만 기록
            # &quot;filters&quot;: [&quot;require_debug_true&quot;],
            &quot;class&quot;: &quot;logging.handlers.RotatingFileHandler&quot;,
            &quot;filename&quot;: BASE_DIR / &quot;logs/mysite.log&quot;,
            &quot;maxBytes&quot;: 1024 * 1024 * 50,  # 50 MB
            &quot;backupCount&quot;: 5,
            &quot;formatter&quot;: &quot;standard&quot;,
            # &quot;formatter&quot;: &quot;format1&quot;,
        },
    },
    &quot;loggers&quot;: {
        &quot;django&quot;: {
            &quot;handlers&quot;: [&quot;console&quot;, &quot;mail_admins&quot;],
            &quot;level&quot;: &quot;INFO&quot;,
        },
        &quot;django.server&quot;: {
            &quot;handlers&quot;: [&quot;django.server&quot;],
            &quot;level&quot;: &quot;INFO&quot;,
            &quot;propagate&quot;: False,
        },
        &quot;middleware.request_log&quot;: {
            &quot;handlers&quot;: [&quot;file&quot;],
            &quot;level&quot;: &quot;INFO&quot;,
        },
    },
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로는 loggers 세팅 부분에 file 이라는 핸들러를 추가하면 파일로 로그가 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 미들웨어 방식으로 하는 것이므로, 맨 마지막 middleware 에서 쓰일 middleware.request_log 라는 이름의 logger를 하나 만들고 출력을 file 로 하는 것을 지정해 뒀다. level 은 INFO 이상인 경우 다 저장하도록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 미들웨어 작업은 어떻게 되었나? 이것도 아래글을 참고해서 슬쩍 만든다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://wilspi.com/post/tech/django-middleware-to-log-requests/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wilspi.com/post/tech/django-middleware-to-log-requests/&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1652832151753&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Log requests and responses with Django Middleware&quot; data-og-description=&quot;From Django&amp;rsquo;s context: Middleware is a framework of hooks into Django&amp;rsquo;s request/response processing. It&amp;rsquo;s a light, low-level &amp;ldquo;plugin&amp;rdquo; system for globally altering Django&amp;rsquo;s input or output. Middleware is like a layer which processes every reques&quot; data-og-host=&quot;wilspi.com&quot; data-og-source-url=&quot;https://wilspi.com/post/tech/django-middleware-to-log-requests/&quot; data-og-url=&quot;https://wilspi.com/post/tech/django-middleware-to-log-requests/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://wilspi.com/post/tech/django-middleware-to-log-requests/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wilspi.com/post/tech/django-middleware-to-log-requests/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Log requests and responses with Django Middleware&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Django&amp;rsquo;s context: Middleware is a framework of hooks into Django&amp;rsquo;s request/response processing. It&amp;rsquo;s a light, low-level &amp;ldquo;plugin&amp;rdquo; system for globally altering Django&amp;rsquo;s input or output. Middleware is like a layer which processes every reques&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wilspi.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거의 글과 동일하게 구성, 나는 다 저장할 것이므로 예제 코드에서 json, api 보는 부분만 다 보도록 수정하는 것 정도 변경되었다. 그래도 코드 남기기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;아, 참고로 장고 로그인 사용자 정보를 남기기도 추가했음.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1652832220900&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;

&quot;&quot;&quot;
import socket
import time
import json
import logging

request_logger = logging.getLogger(__name__)
# logger = logging.getLogger(&quot;my&quot;)


class RequestLogMiddleware:
    &quot;&quot;&quot;Request Logging Middleware.&quot;&quot;&quot;

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # start_time = time.time()
        log_data = {
            &quot;remote_address&quot;: request.META[&quot;REMOTE_ADDR&quot;],
            &quot;server_hostname&quot;: socket.gethostname(),
            &quot;request_method&quot;: request.method,
            &quot;request_path&quot;: request.get_full_path(),
        }

        if request.user.is_authenticated:
            log_data[&quot;request_user&quot;] = request.user.user_id

        # Only logging &quot;*/api/*&quot; patterns
        # if &quot;/api/&quot; in str(request.get_full_path()):
        #     req_body = json.loads(request.body.decode(&quot;utf-8&quot;)) if request.body else {}
        #     log_data[&quot;request_body&quot;] = req_body

        # request passes on to controller
        response = self.get_response(request)

        # # add runtime to our log_data
        # if response and response[&quot;content-type&quot;] == &quot;application/json&quot;:
        #     response_body = json.loads(response.content.decode(&quot;utf-8&quot;))
        #     log_data[&quot;response_body&quot;] = response_body
        # log_data[&quot;run_time&quot;] = time.time() - start_time
        request_logger.info(msg=log_data)
        # logger.info(msg=log_data)

        return response

    # Log unhandled exceptions as well
    def process_exception(self, request, exception):
        try:
            raise exception
        except Exception as e:
            request_logger.exception(&quot;Unhandled Exception: &quot; + str(e))
            # logger.exception(&quot;Unhandled Exception: &quot; + str(e))
        return exception&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;formatters 부분에 쓰이는 내장 오브젝트는 아래 글에서 참고하면 된다. 살짝 테이블을 가져옴&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#formatter-objects&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/3/library/logging.html#formatter-objects&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1652831771901&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;logging &amp;mdash; Logging facility for Python &amp;mdash; Python 3.10.4 documentation&quot; data-og-description=&quot;logging &amp;mdash; Logging facility for Python Source code: Lib/logging/__init__.py This module defines functions and classes which implement a flexible event logging system for applications and libraries. The key benefit of having the logging API provided by a s&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/3/library/logging.html#formatter-objects&quot; data-og-url=&quot;https://docs.python.org/3/library/logging.html#formatter-objects&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#formatter-objects&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/3/library/logging.html#formatter-objects&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;logging &amp;mdash; Logging facility for Python &amp;mdash; Python 3.10.4 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;logging &amp;mdash; Logging facility for Python Source code: Lib/logging/__init__.py This module defines functions and classes which implement a flexible event logging system for applications and libraries. The key benefit of having the logging API provided by a s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;args&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;You shouldn&amp;rsquo;t need to format this yourself.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;The tuple of arguments merged into&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to produce&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;, or a dict whose values are used for the merge (when there is only one argument, and it is a dictionary).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;asctime&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(asctime)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Human-readable time when the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#logging.LogRecord&quot;&gt;&lt;span&gt;LogRecord&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;was created. By default this is of the form &amp;lsquo;2003-07-08 16:49:45,896&amp;rsquo; (the numbers after the comma are millisecond portion of the time).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;created&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(created)f&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Time when the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#logging.LogRecord&quot;&gt;&lt;span&gt;LogRecord&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;was created (as returned by&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/time.html#time.time&quot;&gt;&lt;span&gt;time.time()&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;exc_info&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;You shouldn&amp;rsquo;t need to format this yourself.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Exception tuple (&amp;agrave; la&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;sys.exc_info&lt;/span&gt;) or, if no exception has occurred,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;filename&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(filename)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Filename portion of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt;.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(funcName)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Name of function containing the logging call.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;levelname&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(levelname)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Text logging level for the message (&lt;span&gt;'DEBUG'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'INFO'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'WARNING'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'ERROR'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;'CRITICAL'&lt;/span&gt;).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;levelno&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(levelno)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Numeric logging level for the message (&lt;span&gt;DEBUG&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;INFO&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;WARNING&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ERROR&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;CRITICAL&lt;/span&gt;).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;lineno&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(lineno)d&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Source line number where the logging call was issued (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;message&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(message)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;The logged message, computed as&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;. This is set when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#logging.Formatter.format&quot;&gt;&lt;span&gt;Formatter.format()&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is invoked.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;module&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(module)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Module (name portion of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;msecs&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(msecs)d&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Millisecond portion of the time when the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/library/logging.html#logging.LogRecord&quot;&gt;&lt;span&gt;LogRecord&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;was created.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;msg&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;You shouldn&amp;rsquo;t need to format this yourself.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;The format string passed in the original logging call. Merged with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to produce&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;, or an arbitrary object (see&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.python.org/3/howto/logging.html#arbitrary-object-messages&quot;&gt;&lt;span&gt;Using arbitrary objects as messages&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;name&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(name)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Name of the logger used to log the call.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;pathname&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(pathname)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Full pathname of the source file where the logging call was issued (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;process&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(process)d&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Process ID (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;processName&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(processName)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Process name (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;relativeCreated&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(relativeCreated)d&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;stack_info&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;You shouldn&amp;rsquo;t need to format this yourself.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Stack frame information (where available) from the bottom of the stack in the current thread, up to and including the stack frame of the logging call which resulted in the creation of this record.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;thread&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(thread)d&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Thread ID (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;threadName&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;%(threadName)s&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;Thread name (if available).&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcD2wH/btrCp64NFn8/ucN63hGDSbWVIowScLuXBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcD2wH/btrCp64NFn8/ucN63hGDSbWVIowScLuXBk/img.jpg&quot; data-alt=&quot;고수의 길은 아주 험난하네&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcD2wH/btrCp64NFn8/ucN63hGDSbWVIowScLuXBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcD2wH%2FbtrCp64NFn8%2FucN63hGDSbWVIowScLuXBk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;고수의 길은 아주 험난하네&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@roman-odintsov?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;ROMAN ODINTSOV&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/4955090/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>backend</category>
      <category>File</category>
      <category>formatter</category>
      <category>logging</category>
      <category>middleware</category>
      <category>python</category>
      <category>로그</category>
      <category>로깅</category>
      <category>미들웨어</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/483</guid>
      <comments>https://bthinkr.tistory.com/483#entry483comment</comments>
      <pubDate>Wed, 18 May 2022 09:06:55 +0900</pubDate>
    </item>
    <item>
      <title>Django - Grouping with rowspan and regroup in Django</title>
      <link>https://bthinkr.tistory.com/482</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;regroup 기능을 이용해서 장고 템플릿에서 그룹별로 데이터를 출력하도록 쓰고 있는데, 이놈의 html이란 테이블에서 그룹별로 줄을 하나로 보이게 묶으려니깐 rowspan 이런거 써야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 정리된 글이 있어 일단 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1652434008127&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Grouping with rowspan and regroup in Django&quot; data-og-description=&quot;I have a many to one relationship in Django: Model A and model B. I need to output a table where the objects are ordered and grouped by names Name Amount ====================== A name ...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&quot; data-og-url=&quot;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzRsJN/hyOnWhvwPJ/vYNvdYixRzi2NQkRFJw6x1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/25998557/grouping-with-rowspan-and-regroup-in-django&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzRsJN/hyOnWhvwPJ/vYNvdYixRzi2NQkRFJw6x1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Grouping with rowspan and regroup in Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a many to one relationship in Django: Model A and model B. I need to output a table where the objects are ordered and grouped by names Name Amount ====================== A name ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 정답은 아래와 같고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ifchanged 라는 구문이 있고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;group.list|length 라는 구문을 통해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rowspan 값을 구할 수도 있고&lt;/p&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;table&amp;gt;
  &amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Amount&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;
  &amp;lt;tbody&amp;gt;
  {% regroup object_list by name as grouped %}
  {% for group in grouped %}
  {% for obj in group.list %}
    &amp;lt;tr&amp;gt;
      {% ifchanged %}&amp;lt;td rowspan=&quot;{{ group.list|length }}&quot;&amp;gt;{{ obj.name }}&amp;lt;/td&amp;gt;{% endifchanged %}
      &amp;lt;td&amp;gt;{{ obj.amount }}&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  {% endfor %}
  {% endfor %}
  &amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동작을 잘하니 위 코드를 참고해서 구성하시길&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhdtxS/btrB440b60s/MnL7aygxYkfQj2vqKybt20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhdtxS/btrB440b60s/MnL7aygxYkfQj2vqKybt20/img.jpg&quot; data-alt=&quot;경치좋은 곳의 테이블 이런 테이블을 봐야하는데&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhdtxS/btrB440b60s/MnL7aygxYkfQj2vqKybt20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhdtxS%2FbtrB440b60s%2FMnL7aygxYkfQj2vqKybt20%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;경치좋은 곳의 테이블 이런 테이블을 봐야하는데&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@belart84?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Artem Beliaikin&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/988508/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>html</category>
      <category>ifchanged</category>
      <category>regroup</category>
      <category>rowspan</category>
      <category>table</category>
      <category>Template</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/482</guid>
      <comments>https://bthinkr.tistory.com/482#entry482comment</comments>
      <pubDate>Fri, 13 May 2022 20:27:08 +0900</pubDate>
    </item>
    <item>
      <title>JQuery - select 선택 값 가져오기</title>
      <link>https://bthinkr.tistory.com/481</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;select 선택 값을 jquery로 가져오기, 너무 쉽지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 select 선택해서 val() 하면 되는거 아냐~~~~~ 했다가 ㅋㅋㅋ 실패 NoneType 이 올라오는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;021&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/021.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/021.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅋㅋㅋ 아래처럼 해야 한다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var selvalue = $('#selectbox_id').find(&quot;:selected&quot;).text();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651906961298&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;jQuery Get Selected Option From Dropdown&quot; data-og-description=&quot;Usually I use $(&amp;quot;#id&amp;quot;).val() to return the value of the selected option, but this time it doesn't work. The selected tag has the id aioConceptName html code &amp;lt;label&amp;gt;Name&amp;lt;/label&amp;gt; &amp;lt;in...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&quot; data-og-url=&quot;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fcoi3/hyOjarZU4i/UlIHE8O0NhuhrspblP2kPK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fcoi3/hyOjarZU4i/UlIHE8O0NhuhrspblP2kPK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;jQuery Get Selected Option From Dropdown&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Usually I use $(&quot;#id&quot;).val() to return the value of the selected option, but this time it doesn't work. The selected tag has the id aioConceptName html code &amp;lt;label&amp;gt;Name&amp;lt;/label&amp;gt; &amp;lt;in...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;select&amp;gt; 태그가 &amp;lt;option&amp;gt; 태그로 값을 가져오니 그런가 부다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 이런건 인터넷에 솔루션이 넘쳐나니 걱정할 껀 아니고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nelvq/btrBs0jlN8g/W7UbA0Xovpmcoz1TDSYEwK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nelvq/btrBs0jlN8g/W7UbA0Xovpmcoz1TDSYEwK/img.jpg&quot; data-alt=&quot;골라봐요 ㅋㅋㅋ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nelvq/btrBs0jlN8g/W7UbA0Xovpmcoz1TDSYEwK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnelvq%2FbtrBs0jlN8g%2FW7UbA0Xovpmcoz1TDSYEwK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;골라봐요 ㅋㅋㅋ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@shkrabaanthony?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;ANTONI SHKRABA&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/5214954/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>javascript</category>
      <category>jquery</category>
      <category>option</category>
      <category>select</category>
      <category>selected</category>
      <category>선택값</category>
      <category>셀렉트</category>
      <category>자바스크립트</category>
      <category>프론트엔드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/481</guid>
      <comments>https://bthinkr.tistory.com/481#entry481comment</comments>
      <pubDate>Sat, 7 May 2022 16:05:38 +0900</pubDate>
    </item>
    <item>
      <title>Django - ninja Schema 에서 Foreign key field value 값도 같이 가져오기</title>
      <link>https://bthinkr.tistory.com/480</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;영문으로 된 질문은 &lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;Foreign key field value instead of id without nesting schemas?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;즉, Schema 만들때 외부키로 연결된 모델의 필드 값을 같이 볼 수 있도록 하는 방법, 그러나 nesting 되기를 원하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;그냥 쉽게 하면 nesting으로 되기 때문에 중괄호 안에 또 중괄호가 생겨서 그 값을 가져와야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;그냥 장고 템플릿에서 하는 것 처럼 &quot;외부키__필드명&quot; 이런형태로 막 가져오면 좋으련만 그르케 되지 않네&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;참고로, nesting 된다는 의미는 아래 결과 값을 참고하면 금방 알 수 있다. dep 밑에 dep 필드 가져오려면 복잡해 지제&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;{
    id: 1000,
    name: 'Some name',
    dep: {
        dep: 'Some Text'
        }
        
}&lt;/code&gt;&lt;/pre&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;016&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 dep_dep 이런식으로 가져오는게 좋아 보이는데 방법은,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 정의에서 property를 정의해두고 Model Schema를 만들면 된다고 하네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://github.com/vitalik/django-ninja/issues/291&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/vitalik/django-ninja/issues/291&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아래처럼 @property를 정의해 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;you can add some property for student for department name:&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt; class Student(models.Model):
    ...
    @property
    def dep_name(self):
           return self.dep.dep&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 정의한 property 이름의 변수를 schema 에 정의하면 바로 접근이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;use that property in schema:&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt; class StudentOut(Schema):
    id: int
    name: str
    dep_name: str
    # or dep: str = Field(..., alias='dep_name')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV3QQx/btrBsvql49z/vKKLgsMQDHT6rbVSyK4Uq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV3QQx/btrBsvql49z/vKKLgsMQDHT6rbVSyK4Uq0/img.jpg&quot; data-alt=&quot;이게 영어로 nesting doll 이네 캬&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV3QQx/btrBsvql49z/vKKLgsMQDHT6rbVSyK4Uq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV3QQx%2FbtrBsvql49z%2FvKKLgsMQDHT6rbVSyK4Uq0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이게 영어로 nesting doll 이네 캬&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@cottonbro?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;cottonbro&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/4966180/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>JSON</category>
      <category>model</category>
      <category>modelschema</category>
      <category>nesting</category>
      <category>Ninja</category>
      <category>Property</category>
      <category>Schema</category>
      <category>serialize</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/480</guid>
      <comments>https://bthinkr.tistory.com/480#entry480comment</comments>
      <pubDate>Sat, 7 May 2022 15:58:45 +0900</pubDate>
    </item>
    <item>
      <title>Django - ORM raw sql 에서 NULL 값 체크 비교하기 - PostgreSQL</title>
      <link>https://bthinkr.tistory.com/479</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;NULL 로 저장된 필드값을 비교하는 방법이 머였지? DB 마다 다를 수 있으니 잘 챙겨보시고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PostgreSQL 에서의 정답은&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;IS NULL&lt;br /&gt;&lt;/span&gt;IS NOT NULL&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651494084479&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    id,
    first_name,
    last_name,
    email,
    phone
FROM
    contacts
WHERE
    phone IS NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651494274704&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PostgreSQL IS NULL&quot; data-og-description=&quot;Summary: in this tutorial, you will learn how to use the PostgreSQL IS NULL operator to check if a value is NULL or not. Introduction to NULL and IS NULL operator In the database world, NULL means missing information or not applicable. NULL is not a value,&quot; data-og-host=&quot;www.postgresqltutorial.com&quot; data-og-source-url=&quot;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&quot; data-og-url=&quot;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-is-null/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL IS NULL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Summary: in this tutorial, you will learn how to use the PostgreSQL IS NULL operator to check if a value is NULL or not. Introduction to NULL and IS NULL operator In the database world, NULL means missing information or not applicable. NULL is not a value,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postgresqltutorial.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내코드에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE ...&amp;nbsp; AND devices.devices_id is NULL ...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고 ORM에서 혹시 Null check 를 하려면,&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;field__isnull=True or False&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;queryset = Model.objects.filter(field__isnull=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 적어두는겨~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WUZ7h/btrA6PuSNko/JtWnjZIYDBf2AsG4btGgyk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WUZ7h/btrA6PuSNko/JtWnjZIYDBf2AsG4btGgyk/img.jpg&quot; data-alt=&quot;빈칸 채우기 평소에 생각을 좀 하자 :)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WUZ7h/btrA6PuSNko/JtWnjZIYDBf2AsG4btGgyk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWUZ7h%2FbtrA6PuSNko%2FJtWnjZIYDBf2AsG4btGgyk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;750&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;빈칸 채우기 평소에 생각을 좀 하자 :)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@padrinan?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Miguel &amp;Aacute;. Padri&amp;ntilde;&amp;aacute;n&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1111372/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>ISNULL</category>
      <category>none</category>
      <category>null</category>
      <category>ORM</category>
      <category>PostgreSQL</category>
      <category>queryset</category>
      <category>sql</category>
      <category>__isnull</category>
      <category>널체크</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/479</guid>
      <comments>https://bthinkr.tistory.com/479#entry479comment</comments>
      <pubDate>Mon, 2 May 2022 21:27:42 +0900</pubDate>
    </item>
    <item>
      <title>Django - modelform 에 hidden input 추가하기</title>
      <link>https://bthinkr.tistory.com/478</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;modelform을 사용하면서&amp;nbsp; model 에 정의되지 않는 별도의 사용자 필드를 추가해야 하는 경우가 많다. (ㅋ 나만 그런가) 암튼 이런경우, 템플릿에서는 안 보이기를 원하는 것이 당연하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;input&amp;nbsp;type=&quot;hidden&quot;&amp;nbsp;name=&quot;form-0-instance_id&quot;&amp;nbsp;value=&quot;106&quot;&amp;nbsp;id=&quot;id_form-0-instance_id&quot;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 준비되어 있다 장고는 대부분이&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;forms.HiddenInput()&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;class TagStatusForm(forms.ModelForm):
    class Meta:
        model = TagStatus
        widgets = {'tag': forms.HiddenInput()}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651493769756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Django ModelForm to have a hidden input&quot; data-og-description=&quot;So I have my TagStatus model. I'm trying to make a ModelForm for it. However, my form requires that the hidden input be populated with the {{ tag.name }}. I've been looking through the docs and I d...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&quot; data-og-url=&quot;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cySi1R/hyOe5FaJOR/gHtcsL16svLXidpPu225lk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/15795869/django-modelform-to-have-a-hidden-input&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cySi1R/hyOe5FaJOR/gHtcsL16svLXidpPu225lk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django ModelForm to have a hidden input&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;So I have my TagStatus model. I'm trying to make a ModelForm for it. However, my form requires that the hidden input be populated with the {{ tag.name }}. I've been looking through the docs and I d...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 html template 에서 나오도록 하려면, 아래처럼 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 hidden 필드들이 아래 구문에 의해서 출력되도록 되어 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;{% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %}&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3mPzc/btrA7aeEQtM/Qnk0cgF19hCf6ZtMsO3W30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3mPzc/btrA7aeEQtM/Qnk0cgF19hCf6ZtMsO3W30/img.jpg&quot; data-alt=&quot;숨겨진 폭포, 다리 찾아봐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3mPzc/btrA7aeEQtM/Qnk0cgF19hCf6ZtMsO3W30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3mPzc%2FbtrA7aeEQtM%2FQnk0cgF19hCf6ZtMsO3W30%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;숨겨진 폭포, 다리 찾아봐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@taylor-hunt-605291?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Taylor Hunt&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/9804565/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>Hidden</category>
      <category>hiddeninput</category>
      <category>hidden_fields</category>
      <category>input</category>
      <category>textInput</category>
      <category>모델폼</category>
      <category>장고</category>
      <category>폼</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/478</guid>
      <comments>https://bthinkr.tistory.com/478#entry478comment</comments>
      <pubDate>Mon, 2 May 2022 21:19:40 +0900</pubDate>
    </item>
    <item>
      <title>Django - UpdateView CBV 에서 url path 변수 값 참조하기</title>
      <link>https://bthinkr.tistory.com/476</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;UpdateView 를 이용해서 view 함수를 꾸미는 경우 url 에 정의되어 있는 path parameter 를 어떻게 보나 살펴보고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 view 함수는 그냥 매개변수로 넘겨주니깐 쉽게 되는데, class view 로 하는경우는 멀로 참고하나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;kwargs['변수명'] 뽑아 쓰라는 것&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이네!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예제를 보면, self.kwargs[&quot;원하는변수명&quot;] 이런식으로 뽑아쓰고 있는 것을 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;class DNSSettingsUpdateView(UpdateView):
    model = Domain
    form_class = NsRecordModelForm
    template_name = &quot;engine/dns_settings.html&quot;

    def get_object(self, queryset=None):
        return Domain.objects.get(name=self.kwargs['domain_name'])

    def get_success_url(self):
        return reverse(&quot;my-domains&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651458571438&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How can i get a url param for an updateview in django?&quot; data-og-description=&quot;url: &amp;#96;path('my-domains/&amp;lt;str:domain_name&amp;gt;/dns-settings', login_required(DNSSettingsUpdateView.as_view()), name='dns_settings')&amp;#96; I want to get str:domain_name to use in my updateview: class&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&quot; data-og-url=&quot;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NQYF4/hyOe3Udo08/rTs8aCuGiGUsKczCdyxqnK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/60917189/how-can-i-get-a-url-param-for-an-updateview-in-django&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NQYF4/hyOe3Udo08/rTs8aCuGiGUsKczCdyxqnK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How can i get a url param for an updateview in django?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;url: `path('my-domains/&amp;lt;str:domain_name&amp;gt;/dns-settings', login_required(DNSSettingsUpdateView.as_view()), name='dns_settings')` I want to get str:domain_name to use in my updateview: class&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 view 함수에 init 할때 변수명도 같이 넘겨주면 되는거 아닌가 싶은데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머 쓸수만 있으면 되지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8gLRS/btrA3tk9tb4/Pb4UAbmaiVTuf8SQNmadS1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8gLRS/btrA3tk9tb4/Pb4UAbmaiVTuf8SQNmadS1/img.jpg&quot; data-alt=&quot;잘 골라서 드세요 :)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8gLRS/btrA3tk9tb4/Pb4UAbmaiVTuf8SQNmadS1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8gLRS%2FbtrA3tk9tb4%2FPb4UAbmaiVTuf8SQNmadS1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1222&quot; height=&quot;750&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 골라서 드세요 :)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@any-lane?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Any Lane&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/5945573/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>ARGs</category>
      <category>classview</category>
      <category>Django</category>
      <category>get_object</category>
      <category>kwargs</category>
      <category>PARAM</category>
      <category>Updateview</category>
      <category>URL</category>
      <category>url param</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/476</guid>
      <comments>https://bthinkr.tistory.com/476#entry476comment</comments>
      <pubDate>Mon, 2 May 2022 11:32:28 +0900</pubDate>
    </item>
    <item>
      <title>JQuery - 체크박스 선택시 input 활성화 및 포커스 주기</title>
      <link>https://bthinkr.tistory.com/475</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;폼 객체를 한줄씩 쭉 나열되어 있고, 체크박스가 맨 앞에 있어서 체크를 하면 해당 줄이 활성화 되도록 하는 것 많이 정답들이 나와 있지만, 간단하게 구현한 결과를 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651449996130&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    $(&quot;input:checkbox&quot;).on('click', function() { 
        var target_input_name = &quot;#&quot; + $(this).val() + &quot;_quantity&quot;
        if ( $(this).prop('checked') ) { 
            console.log($(this).val())
            $(target_input_name).prop(&quot;disabled&quot;, false);
            $(target_input_name).focus();
        } else {
            $(target_input_name).prop(&quot;disabled&quot;, true);
            $(target_input_name).blur();
        } 
    });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체크박스 클릭 이벤트에서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타겟 이름을 머 가져오고 난 다음, (여기서는 &quot;체크박스값_quantity&quot; 라는 이름의 input form 이 있다는 가정임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체크박스가 checked 인지 아닌지 보고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화 focus 등등을 주면 된다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고페이지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lynmp.com/ko/article/tg1c704a401l&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://lynmp.com/ko/article/tg1c704a401l&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651450289828&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[jQuery제이쿼리] input 박스에 커서 이동시키기, focus() - LYNMP&quot; data-og-description=&quot;홈페이가 열렸을 때, input 박스에 커서를 깜빡이게 하고 싶어서 찾아본 김에 정리합니다. 제이쿼리로 커서 강제 이동은 focus()를 이용합니다. focus 해제는 &amp;#96;blur()&amp;#96;를 사용합니다.&quot; data-og-host=&quot;lynmp.com&quot; data-og-source-url=&quot;https://lynmp.com/ko/article/tg1c704a401l&quot; data-og-url=&quot;https://lynmp.com/ko/article/tg1c704a401l/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hz6wG/hyOfenMiF8/4u7KJsL9U0gRignJscV6q1/img.png?width=180&amp;amp;height=180&amp;amp;face=0_0_180_180,https://scrap.kakaocdn.net/dn/AkrOl/hyOdCqd3P6/paESagk2NJHm8NYry98XbK/img.png?width=180&amp;amp;height=180&amp;amp;face=0_0_180_180,https://scrap.kakaocdn.net/dn/dX18bR/hyOdtmCd1z/0KDqS2wfv9ummmgyjrTuHk/img.jpg?width=436&amp;amp;height=436&amp;amp;face=0_0_436_436&quot;&gt;&lt;a href=&quot;https://lynmp.com/ko/article/tg1c704a401l&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lynmp.com/ko/article/tg1c704a401l&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hz6wG/hyOfenMiF8/4u7KJsL9U0gRignJscV6q1/img.png?width=180&amp;amp;height=180&amp;amp;face=0_0_180_180,https://scrap.kakaocdn.net/dn/AkrOl/hyOdCqd3P6/paESagk2NJHm8NYry98XbK/img.png?width=180&amp;amp;height=180&amp;amp;face=0_0_180_180,https://scrap.kakaocdn.net/dn/dX18bR/hyOdtmCd1z/0KDqS2wfv9ummmgyjrTuHk/img.jpg?width=436&amp;amp;height=436&amp;amp;face=0_0_436_436');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[jQuery제이쿼리] input 박스에 커서 이동시키기, focus() - LYNMP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;홈페이가 열렸을 때, input 박스에 커서를 깜빡이게 하고 싶어서 찾아본 김에 정리합니다. 제이쿼리로 커서 강제 이동은 focus()를 이용합니다. focus 해제는 `blur()`를 사용합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lynmp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cocosoft.kr/397&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cocosoft.kr/397&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651450243834&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[jQuery]html 체크박스 체크시 이벤트 동작 발생&quot; data-og-description=&quot;예전에도 input type=&amp;quot;checkbox&amp;quot; 의 이벤트 실행해 대해서 포스팅 한 적 있습니다. 개인적으로 체크박스로 만들어 진 것은 제어하기가 편해서 많이 사용 하는 것 같네요. 오늘은 간단하게 체크박스 클&quot; data-og-host=&quot;cocosoft.kr&quot; data-og-source-url=&quot;https://cocosoft.kr/397&quot; data-og-url=&quot;https://cocosoft.kr/397&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/W4u2D/hyOdtNEhWF/DkAi3UgWRVzFmSNyYEjJgk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/DB68C/hyOdyH8Fxt/PqAzt7yHKXTLsDWq9fykw0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://cocosoft.kr/397&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cocosoft.kr/397&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/W4u2D/hyOdtNEhWF/DkAi3UgWRVzFmSNyYEjJgk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/DB68C/hyOdyH8Fxt/PqAzt7yHKXTLsDWq9fykw0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[jQuery]html 체크박스 체크시 이벤트 동작 발생&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;예전에도 input type=&quot;checkbox&quot; 의 이벤트 실행해 대해서 포스팅 한 적 있습니다. 개인적으로 체크박스로 만들어 진 것은 제어하기가 편해서 많이 사용 하는 것 같네요. 오늘은 간단하게 체크박스 클&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cocosoft.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4fG7r/btrAWBE7jJJ/XftpAmJhntkZ993Ap89Pgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4fG7r/btrAWBE7jJJ/XftpAmJhntkZ993Ap89Pgk/img.jpg&quot; data-alt=&quot;포커스하세요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4fG7r/btrAWBE7jJJ/XftpAmJhntkZ993Ap89Pgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4fG7r%2FbtrAWBE7jJJ%2FXftpAmJhntkZ993Ap89Pgk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포커스하세요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@jonas-svidras?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Jonas Svidras&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/759960/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>Blur</category>
      <category>disable</category>
      <category>Focus</category>
      <category>javascript</category>
      <category>jquery</category>
      <category>prop</category>
      <category>체크박스</category>
      <category>클릭</category>
      <category>프론트엔드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/475</guid>
      <comments>https://bthinkr.tistory.com/475#entry475comment</comments>
      <pubDate>Mon, 2 May 2022 09:10:14 +0900</pubDate>
    </item>
    <item>
      <title>Django - template 에서 데이터 없는 지 체크 None empty</title>
      <link>https://bthinkr.tistory.com/474</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;장고 템플릿에서 이 데이터가 있는지 없는지 보고 어떤 표현을 해야 하는 경우가 다반사이다. 이때 자꾸 헷갈려서 여기 한번 적어 둔다. 이런 내용은 매번 찾아보는 듯 쓸때마다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 None 을 체크하면 될 듯하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래처럼 == None 을 체크하던지, 아니면 그냥 변수명만 조건문에 넣어도 되는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;{% if profile.user.first_name == None %}
{% if not profile.user.first_name %}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651448170735&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;What is the equivalent of &amp;quot;none&amp;quot; in django templates?&quot; data-og-description=&quot;I want to see if a field/variable is none within a Django template. What is the correct syntax for that? This is what I currently have: {% if profile.user.first_name is null %} &amp;lt;p&amp;gt; -- &amp;lt;...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&quot; data-og-url=&quot;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZ4erw/hyOdA0geUQ/HAUcInYBZk8bHk5FRStCk0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/11945321/what-is-the-equivalent-of-none-in-django-templates&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZ4erw/hyOdA0geUQ/HAUcInYBZk8bHk5FRStCk0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;What is the equivalent of &quot;none&quot; in django templates?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I want to see if a field/variable is none within a Django template. What is the correct syntax for that? This is what I currently have: {% if profile.user.first_name is null %} &amp;lt;p&amp;gt; -- &amp;lt;...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lqDQp/btrAXCjmrDG/k78MtglCw7BOtXjsaqBmdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lqDQp/btrAXCjmrDG/k78MtglCw7BOtXjsaqBmdk/img.jpg&quot; data-alt=&quot;여보세요 거기 누구 없소?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lqDQp/btrAXCjmrDG/k78MtglCw7BOtXjsaqBmdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlqDQp%2FbtrAXCjmrDG%2Fk78MtglCw7BOtXjsaqBmdk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여보세요 거기 누구 없소?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@kaiquestr?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Kaique Rocha&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/50859/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>empty</category>
      <category>none</category>
      <category>Template</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/474</guid>
      <comments>https://bthinkr.tistory.com/474#entry474comment</comments>
      <pubDate>Mon, 2 May 2022 08:47:36 +0900</pubDate>
    </item>
    <item>
      <title>Django - resolve_url redirect 등 url mapped 함수 가져오기</title>
      <link>https://bthinkr.tistory.com/473</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;보통 urls.py 파일에 여러가기 view 의 주소를 많이 지정해 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩중에 해당 페이지로 이동하거나 render 를 하고 싶다면 이 view 에 맵핑된 주소를 불러와야 하는데 주소를 바로 주게 되면 혹시 변경이 생기는 경우, 그냥 소스 전체를 찾아서 수정해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 방지하기 위해 url 에 접근하는 함수가 몇개 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 그냥&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;resolve_url&lt;br /&gt;&lt;/span&gt;redirect&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이정도 쓰면 될듯&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from django.shortcuts import resolve_url, redirect

resolve_url('blog:post_detail', 10) # '/blog/10/'
redirect('blog:post_detail', 10)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고 템플릿에서 쓰는 방법은 다들 아는 바와 같이 아래처럼 사용하면 된다.&lt;/p&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;{% url 'blog:post_detail' post.id %}&quot;&amp;gt;{{ post.title }}&amp;lt;/a&amp;gt; &amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 내용은 아래 원본글에서 더 자세하게 보세요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651447485873&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;URL Reverse, 아는 사람은 꼭 쓴다는 get_absolute_url() &amp;middot; 초보몽키의 개발공부로그&quot; data-og-description=&quot;특정 모델에 대한 Detail뷰를 작성할 경우, Detail뷰에 대한 URLConf설정을 하자마자, 필히 get_absolute_url설정을 해주세요. 코드가 보다 간결해집니다&quot; data-og-host=&quot;wayhome25.github.io&quot; data-og-source-url=&quot;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&quot; data-og-url=&quot;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbqUfZ/hyOdvdx21S/HlLoeAhng2WsId9cWr58a1/img.jpg?width=304&amp;amp;height=350&amp;amp;face=0_0_304_350&quot;&gt;&lt;a href=&quot;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wayhome25.github.io/django/2017/05/05/django-url-reverse/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbqUfZ/hyOdvdx21S/HlLoeAhng2WsId9cWr58a1/img.jpg?width=304&amp;amp;height=350&amp;amp;face=0_0_304_350');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;URL Reverse, 아는 사람은 꼭 쓴다는 get_absolute_url() &amp;middot; 초보몽키의 개발공부로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;특정 모델에 대한 Detail뷰를 작성할 경우, Detail뷰에 대한 URLConf설정을 하자마자, 필히 get_absolute_url설정을 해주세요. 코드가 보다 간결해집니다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wayhome25.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7mL2l/btrARg82X67/em9j3EFHPQHiv0k9iEmOa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7mL2l/btrARg82X67/em9j3EFHPQHiv0k9iEmOa1/img.jpg&quot; data-alt=&quot;reverse 로 검색한 결과화면 ㅋㅋ 어깨 스트레칭하자 자주&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7mL2l/btrARg82X67/em9j3EFHPQHiv0k9iEmOa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7mL2l%2FbtrARg82X67%2Fem9j3EFHPQHiv0k9iEmOa1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reverse 로 검색한 결과화면 ㅋㅋ 어깨 스트레칭하자 자주&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@hannaauramenka?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Hanna Auramenka&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/8567596/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>Redirect</category>
      <category>resolve_url</category>
      <category>Reverse</category>
      <category>shortcuts</category>
      <category>URL</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/473</guid>
      <comments>https://bthinkr.tistory.com/473#entry473comment</comments>
      <pubDate>Mon, 2 May 2022 08:30:57 +0900</pubDate>
    </item>
    <item>
      <title>Django - LEFT Join 을 위해 ORM의 raw sql 사용</title>
      <link>https://bthinkr.tistory.com/472</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LEFT JOIN 해서 테이블을 쫙 보여주고 싶었는데 ORM 의 기본기능으로는 안되는 건가? 일단 급한대로 raw sql을 직접 집어넣는 형태로 구현을 해 놓고 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651383297684&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    item_list = Parts.objects.raw(
        &quot;SELECT devices_parts.*, devices_lineparts.quantity \
        FROM devices_parts \
        LEFT JOIN devices_lineparts \
        ON devices_parts.id=devices_lineparts.parts_id AND devices_lineparts.line_id=&quot;
        + str(line_pk)
        + &quot; ORDER BY devices_parts.group0_id ASC, devices_parts.group1_id ASC, devices_parts.name ASC&quot;
    )
    print(item_list.query)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장비 목록이 하나의 테이블로 저장되어 있고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 장비별 라인에서 사용하는 갯수를 또 다른 테이블에 저장하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장비 목록에서 정방향 참조를 할 수 없고, 라인별 장비 저장 테이블에서 정방향으로 가져오려니 전체 장비 목록에 숫자만 넣는 형태가 안되고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LEFT Join으로 많이 찾아 보는데 그냥 이걸로 쓰자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Model.objects.raw(&quot;SQL문장&quot;) 이렇게 쓸 수 있으니 다행이긴 한데 쫌 찝찝&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L41HU/btrASBjTKvz/rwXwqKMRjNg1PZD4CtCXk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L41HU/btrASBjTKvz/rwXwqKMRjNg1PZD4CtCXk1/img.jpg&quot; data-alt=&quot;복잡한 도시 앞 가지런한 집 내머리속도 지식정리가 좀 되어야 할듯&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L41HU/btrASBjTKvz/rwXwqKMRjNg1PZD4CtCXk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL41HU%2FbtrASBjTKvz%2FrwXwqKMRjNg1PZD4CtCXk1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;복잡한 도시 앞 가지런한 집 내머리속도 지식정리가 좀 되어야 할듯&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@enric-cruz-lopez?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Enric Cruz L&amp;oacute;pez&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/6039188/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>Join</category>
      <category>leftjoin</category>
      <category>ORM</category>
      <category>RAW</category>
      <category>sql</category>
      <category>데이터베이스</category>
      <category>역방향참조</category>
      <category>정방향참조</category>
      <category>조인</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/472</guid>
      <comments>https://bthinkr.tistory.com/472#entry472comment</comments>
      <pubDate>Sun, 1 May 2022 14:40:35 +0900</pubDate>
    </item>
    <item>
      <title>JQuery Ajax 로 form submit 하기 - form value 그대로 가져오기</title>
      <link>https://bthinkr.tistory.com/471</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요거 쉬운거 같은데, 예제들이 죄다 json으로 바꿔서 API 호출하는 형태로 되어 있는 것이 많네. 그냥 html 페이지에 있는 form submit을 jquery ajax 함수로 호출하는 방법을 정리해 두자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 한 이유는 submit 하고, 바로 그 정보를 이용해서 새창을 띄우도록 하려고 하니깐 ajax async false 로 동작 시켜야 했기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 코드를 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651226101574&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(&quot;#sel2&quot;).click(function(e){

    e.preventDefault(); // avoid to execute the actual submit of the form.
    var button = $(this);
    var form = $(&quot;#mainform&quot;);
    var actionUrl = form.attr('action');
    $.ajax({
        type: &quot;POST&quot;,
        url: actionUrl,
        data: form.serialize(), // serializes the form's elements.
        // 다른 페이지를 처리 후에 결과가 성공일 때 // 비동기식으로 처리를 함 
        async: false,
        // 출처: https://han288.tistory.com/71 [사이트 구축/최적화 활용 팁]                
        
        success: function(data)
        {
            console.log('Submission was successful.');
            console.log(data);
            alert(data); // show response from the php script.
            //출처: https://link2me.tistory.com/1048 [소소한 일상 및 업무TIP 다루기]
            cw=screen.availWidth;     //화면 넓이
            ch=screen.availHeight;    //화면 높이
            sw=cw/2;    //띄울 창의 넓이
            // sw=cw-200;    //띄울 창의 넓이
            sh=ch/2;    //띄울 창의 높이
            ml=(cw-sw)/2; //가운데 띄우기위한 창의 x위치
            mt=(ch-sh)/2; //가운데 띄우기위한 창의 y위치
            var url = button.data('to-url');
            // console.log($(this).data('to-url'));
            if(url != '0'){
                window.open(url, 'tst','width='+sw+',height='+sh+',top='+mt+',left='+ml+',resizable=yes,scrollbars=yes');
            }
        }
        error: function (data) {
            console.log('An error occurred.');
            console.log(data);
        },                
    });
    // $(&quot;#mainform&quot;).submit();

    return false;
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;sel2&quot; 라는 아이디를 가진 버튼을 누르면 해당 폼의 submit 을 ajax 함수로 호출하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 보면 form.serialize() 함수를 이용하여 폼에 속한 input 값들을 가져오도록 한다는 게 내가 찾고 싶은 정보였음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 성공하고 나면, 새창을 띄워주는 코드 까지 완료해두고 저장.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고페이지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651227243594&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;jQuery AJAX submit form&quot; data-og-description=&quot;I have a form with name orderproductForm and an undefined number of inputs. I want to do some kind of jQuery.get or ajax or anything like that that would call a page through Ajax, and send along a...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&quot; data-og-url=&quot;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/k6Ary/hyOdsMVPaS/gZ4gj8Wntb02j5zLkx8Hzk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/1960240/jquery-ajax-submit-form&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/k6Ary/hyOdsMVPaS/gZ4gj8Wntb02j5zLkx8Hzk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;jQuery AJAX submit form&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a form with name orderproductForm and an undefined number of inputs. I want to do some kind of jQuery.get or ajax or anything like that that would call a page through Ajax, and send along a...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nb2kL/btrAQJbdkgb/OFiKMTwA7sw7chkZiEeeo1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nb2kL/btrAQJbdkgb/OFiKMTwA7sw7chkZiEeeo1/img.jpg&quot; data-alt=&quot;오래되고 망가진 기술도 다시 보자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nb2kL/btrAQJbdkgb/OFiKMTwA7sw7chkZiEeeo1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnb2kL%2FbtrAQJbdkgb%2FOFiKMTwA7sw7chkZiEeeo1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;750&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오래되고 망가진 기술도 다시 보자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@lindeboom-jean-bapt-197247?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Lindeboom Jean-Bapt&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/613778/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>ajax</category>
      <category>async</category>
      <category>form</category>
      <category>jquery</category>
      <category>serialize</category>
      <category>submit</category>
      <category>동기</category>
      <category>새창</category>
      <category>폼동작이후</category>
      <category>프론트엔드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/471</guid>
      <comments>https://bthinkr.tistory.com/471#entry471comment</comments>
      <pubDate>Fri, 29 Apr 2022 19:04:28 +0900</pubDate>
    </item>
    <item>
      <title>Django - ModelForm 에서 DateField DateTimeField 위젯 선택</title>
      <link>https://bthinkr.tistory.com/470</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;원래 자동으로 Date picker 가 포함되는 widget이 나왔던 거 같은데, 잘 안되네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB Model 에 날짜 관련 필드를 설정한 곳은 widget 이 date picker 같은 것이 가능하도록 나와야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드처럼, class Meta 에 해당 필드의 Widget 을 직접 지정해주면 머 당연히 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1651121341516&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Meta:
    model = CreateNewPatient
    fields = ['first_name', 'nickname','last_name',
        'date_of_birth', 'school_grade', 'sex', 'school']
    widgets = {
        'date_of_birth': forms.DateInput(format=('%m/%d/%Y'), attrs={'class':'form-control', 'placeholder':'Select a date', 'type':'date'}),
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651121380390&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Django 2.0 ModelForm dateField not displaying as a widget&quot; data-og-description=&quot;I have a fairly simple model form with a 'date_of_birth' input value of type datefield(). For whatever reason, I cannot get it to display as a widget and can only get it to display as a text input....&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&quot; data-og-url=&quot;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Sv3QR/hyOczsdbOf/HKROrJbM0LS40rBUjLBgl0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/49440853/django-2-0-modelform-datefield-not-displaying-as-a-widget&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Sv3QR/hyOczsdbOf/HKROrJbM0LS40rBUjLBgl0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django 2.0 ModelForm dateField not displaying as a widget&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a fairly simple model form with a 'date_of_birth' input value of type datefield(). For whatever reason, I cannot get it to display as a widget and can only get it to display as a text input....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 자동으로 안되면 이 코드를 참고해서 하기 바란다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baIOiB/btrAFjqzv9T/DnLjVrLy7hduweoVwJYgMk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baIOiB/btrAFjqzv9T/DnLjVrLy7hduweoVwJYgMk/img.jpg&quot; data-alt=&quot;예외가 너무 많다 개발은&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baIOiB/btrAFjqzv9T/DnLjVrLy7hduweoVwJYgMk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaIOiB%2FbtrAFjqzv9T%2FDnLjVrLy7hduweoVwJYgMk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예외가 너무 많다 개발은&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@markusspiske?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Markus Spiske&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1679618/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>date</category>
      <category>datefield</category>
      <category>Django</category>
      <category>날짜입력</category>
      <category>모델폼</category>
      <category>위젯</category>
      <category>위젯선택</category>
      <category>위젯옵션</category>
      <category>필드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/470</guid>
      <comments>https://bthinkr.tistory.com/470#entry470comment</comments>
      <pubDate>Thu, 28 Apr 2022 13:51:48 +0900</pubDate>
    </item>
    <item>
      <title>Django - Form ModelForm BSModalModelForm 등 폼에서 request 객체 참조하기</title>
      <link>https://bthinkr.tistory.com/469</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;너무 기본적이라 알고 있을 수 있지만, 불편했기에 정리해둠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Form, Modelform, BSModalModelForm 에서 request 객체를 직접 접근이 안되기에, 왜 안될까 보는 중에 __init__ 함수 호출시에 매개변수로 넘어온다는 것을 보니 그냥 그값을 저장해서 사용하자는 접근&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 보는 것이 낫겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651102005044&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class ProductProfileUpdateForm(BSModalModelForm, ProductProfileForm):
    # date = forms.DateField(
    #     error_messages = {
    #       'invalid': 'YYYY-MM-DD 입력'
    #     })
    title = &quot;&quot;
    is_admin = 0

    class Meta:
        model = ProductProfile
        fields = __all__

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print(&quot;=== ProductProfileForm ===&quot;, args, kwargs)
        requestdata = kwargs.pop(&quot;request&quot;, None)
        print(requestdata)
        self.is_admin = requestdata.user.is_superuser
        print(self.is_admin)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;init 함수에서 kwargs 를 찍어 보니깐,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;===&amp;nbsp;ProductProfileForm&amp;nbsp;===&amp;nbsp;()&amp;nbsp;{'initial':&amp;nbsp;{},&amp;nbsp;'prefix':&amp;nbsp;None,&amp;nbsp;'instance':&amp;nbsp;&amp;lt;ProductProfile:&amp;nbsp;test111111&amp;gt;,&amp;nbsp;'request':&amp;nbsp;&amp;lt;WSGIRequest:&amp;nbsp;GET&amp;nbsp;'/productprofile/36/update'&amp;gt;}&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력되는 변수중에 request 가 떡하니 자리를 잡고 있네.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 pop 으로 뽑아서 쓰면 되겟다 생각해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;user.is_superuser 값을 뽑아 보니 정상으로 동작.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6ltZa/btrAEHdBify/GbtCgcOaKqnGbl17FpkEvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6ltZa/btrAEHdBify/GbtCgcOaKqnGbl17FpkEvK/img.jpg&quot; data-alt=&quot;깊이 들여다봐야 제대로 안다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6ltZa/btrAEHdBify/GbtCgcOaKqnGbl17FpkEvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6ltZa%2FbtrAEHdBify%2FGbtCgcOaKqnGbl17FpkEvK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;695&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;깊이 들여다봐야 제대로 안다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@jan-krnc-268225?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Jan Krnc&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/840810/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>BSModalModelForm</category>
      <category>Django</category>
      <category>form</category>
      <category>kwargs</category>
      <category>modelform</category>
      <category>POP</category>
      <category>request</category>
      <category>__init__</category>
      <category>오버라이딩</category>
      <category>참조</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/469</guid>
      <comments>https://bthinkr.tistory.com/469#entry469comment</comments>
      <pubDate>Thu, 28 Apr 2022 08:32:21 +0900</pubDate>
    </item>
    <item>
      <title>JQuery - select 박스 선택시 일부 disable 설정하기</title>
      <link>https://bthinkr.tistory.com/468</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 노트 저장용, 선택된 값에 따라 특정 Input 을 비활성화 시킬 때 사용하는 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;attr&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;removeAttr&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prop&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 것들을 잘써야 하네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651048741179&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    $(&quot;[name$='-group0']&quot;).on(&quot;change&quot;, function(){
        // //selected value
        // console.log($(this).val());
        // console.log($(&quot;option:selected&quot;, this).attr(&quot;value&quot;));
        // //selected option element
        // console.log($(&quot;option:selected&quot;, this));
        // console.log($(&quot;option:selected&quot;, this).text());
        // console.log($(this).find(&quot;option:selected&quot;).text());
        // // 텍스트 박스 readonly 처리 
        // $(&quot;#txtBox&quot;).attr(&quot;readonly&quot;,true); 
        // // readonly 삭제 
        // $(&quot;#txtBox&quot;).removeAttr(&quot;readonly&quot;); 
        // // disabled 처리 
        // $(&quot;#txtBox&quot;).attr(&quot;disabled&quot;,true); 
        // // disabled 삭제 
        // $(&quot;#txtBox&quot;).removeAttr(&quot;disabled&quot;); 
        // // disabled 여부 
        // if($(&quot;#txtBox&quot;).is(&quot;:disabled&quot;)){
        //      console.log(&quot;txtBox는 disabled 처리 되어 있음&quot;); 
        // }
        
        if ( $(&quot;option:selected&quot;, this).text() != &quot;Spare Parts&quot; )
        {
            forms = $(this).closest('.form-row');
            console.log(forms)
            $(forms.get(0)).find(&quot;[name$='-group1']&quot;).each(function () {
                $(this).prop('disabled', true);
            });
            // $(forms.get(0)).find(&quot;[name$='-partnumber']&quot;).each(function () {
            //     $(this).prop('disabled', true);
            // });
            // $(forms.get(0)).find(&quot;[name$='-desc']&quot;).each(function () {
            //     $(this).prop('disabled', true);
            // });
        }
        // e.preventDefault();
        // console.log(e)
        // console.log(this.value, this.text)
        // alert($(this).text);
        // return false;
    });&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rfdAt/btrADx947Sx/E18BA4A5AcUKSmGjg81qKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rfdAt/btrADx947Sx/E18BA4A5AcUKSmGjg81qKk/img.jpg&quot; data-alt=&quot;벌써 여름이다 엄청 더움&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rfdAt/btrADx947Sx/E18BA4A5AcUKSmGjg81qKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrfdAt%2FbtrADx947Sx%2FE18BA4A5AcUKSmGjg81qKk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1242&quot; height=&quot;750&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;벌써 여름이다 엄청 더움&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@nietjuh?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Ylanite Koppens&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1209611/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/프론트엔드</category>
      <category>attr</category>
      <category>closest</category>
      <category>html</category>
      <category>jquery</category>
      <category>prop</category>
      <category>removeAttr</category>
      <category>노트</category>
      <category>코드</category>
      <category>팁</category>
      <category>프론트엔드</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/468</guid>
      <comments>https://bthinkr.tistory.com/468#entry468comment</comments>
      <pubDate>Wed, 27 Apr 2022 17:42:54 +0900</pubDate>
    </item>
    <item>
      <title>Django - model formview 에서 저장되는 객체 값 참고하기</title>
      <link>https://bthinkr.tistory.com/467</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이거 가장 기본인데, 저장은 되는데 내가 그 값을 보고 쓸 수는 없다니, 말도 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰기만 하면 내부적으로 막 돌아가서 자동 저장되는 것처럼 보이니깐 막상 어떤 값을 뽑아 쓰려면 참나...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 저장되는 객체의 필드를 참고하고 싶었는데 어떻게 참고해야 하는지 몰랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;self.form_class.xxxx&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;self.instance.xxxx&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;self.form_class.instance.xxxx&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 실패, 정답은&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;self.object.xxxx&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650952877164&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@method_decorator(admin_required, name=&quot;dispatch&quot;)
class PartsUpdateView(BSModalUpdateView):
    model = Parts
    filter = &quot;&quot;
    template_name = &quot;devices/_modal_update.html&quot;
    form_class = PartsUpdateForm
    success_message = &quot;Parts saved.&quot;
    success_url = reverse_lazy(&quot;devices:parts_list&quot;)
    # def get_success_url(self):
    #     return self.request.META[&quot;HTTP_REFERER&quot;]

    def get_context_data(self, **kwargs):
        context = super(PartsUpdateView, self).get_context_data(**kwargs)
        print(&quot;get_context_data&quot;, context)
        if self.request.POST:
            print(self.request.POST)
        return context

    def form_valid(self, form):
        print(&quot;form_valid&quot;)
        # if not self.request.is_ajax():
        if self.request.POST.get(&quot;querystring&quot;):
            self.filter = &quot;?&quot; + self.request.POST.get(&quot;querystring&quot;)
        response = super().form_valid(form)
        return response

    def get_success_url(self):
        print(&quot;get_success_url&quot;, self.object.name)
        self.success_message = &quot;Parts '&quot; + self.object.name + &quot;' saved.&quot;
        return reverse_lazy(&quot;devices:parts_list&quot;) + self.filter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 참고하기 바란다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공했을때 이름을 넣고 싶어서 찾아 본건데, 이 쉬운걸 말이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고사이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@hyeseong-dev/django-getsuccessurl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@hyeseong-dev/django-getsuccessurl&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650952949404&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[django] get_success_url&quot; data-og-description=&quot;현재 우리가 프로필 정보를 수정하고 나면메인 화면으로 가게 되어있어요. 사실상 프로필 수정 입력화면 -&amp;gt; 프로필 화면으로 가는 것이 자연스럽습니다. 이를 수정할게요.그런데 그냥 단순히 suc&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@hyeseong-dev/django-getsuccessurl&quot; data-og-url=&quot;https://velog.io/@hyeseong-dev/django-getsuccessurl&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Y4ELE/hyObxOBRsK/clmDSA2WmC6qMgDWlZVSh1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/byX1Fa/hyObzyS1Am/G0BdlA9tkz4ERcwzr84irK/img.jpg?width=460&amp;amp;height=460&amp;amp;face=91_153_203_275&quot;&gt;&lt;a href=&quot;https://velog.io/@hyeseong-dev/django-getsuccessurl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@hyeseong-dev/django-getsuccessurl&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Y4ELE/hyObxOBRsK/clmDSA2WmC6qMgDWlZVSh1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/byX1Fa/hyObzyS1Am/G0BdlA9tkz4ERcwzr84irK/img.jpg?width=460&amp;amp;height=460&amp;amp;face=91_153_203_275');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[django] get_success_url&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;현재 우리가 프로필 정보를 수정하고 나면메인 화면으로 가게 되어있어요. 사실상 프로필 수정 입력화면 -&amp;gt; 프로필 화면으로 가는 것이 자연스럽습니다. 이를 수정할게요.그런데 그냥 단순히 suc&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쩝.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5eO73/btrAss25nG1/dEIBFH0MnkXDDe5K93t1yk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5eO73/btrAss25nG1/dEIBFH0MnkXDDe5K93t1yk/img.jpg&quot; data-alt=&quot;목적지는 어딘지 걍 걸어가는구나&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5eO73/btrAss25nG1/dEIBFH0MnkXDDe5K93t1yk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5eO73%2FbtrAss25nG1%2FdEIBFH0MnkXDDe5K93t1yk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;750&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;목적지는 어딘지 걍 걸어가는구나&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@iakub-arifulin-205356454?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Iakub Arifulin&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/11653089/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>FormView</category>
      <category>form_class</category>
      <category>instance</category>
      <category>modelview</category>
      <category>object</category>
      <category>self.object</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/467</guid>
      <comments>https://bthinkr.tistory.com/467#entry467comment</comments>
      <pubDate>Tue, 26 Apr 2022 15:03:47 +0900</pubDate>
    </item>
    <item>
      <title>Django - model formview 에서 사용자 정의 필드값 받아서 처리하기</title>
      <link>https://bthinkr.tistory.com/466</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;model 에 바인딩된 model form view 등을 쓰게 되면 사용자 정의 필드, 혹은 값을 따로 받아서 처리하기가 약간 애매했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머든 방법은 있으니깐,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;form 에서 사용자 변수 필드를 hidden 으로 보내줘도 받는놈이 받아야 하는데, model 에 연결된 것들은 해당 필드만 싹 가져오니깐 내가 고생해서 올려준 필드값을 볼 수 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 form_valid 를 overriding 해서 미리 보고, 내부 변수에 넣어두고 사용하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650951980199&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@method_decorator(admin_required, name=&quot;dispatch&quot;)
class PartsUpdateView(BSModalUpdateView):
    model = Parts
    filter = &quot;&quot;
    template_name = &quot;devices/_modal_update.html&quot;
    form_class = PartsUpdateForm
    success_message = &quot;Parts saved.&quot;
    success_url = reverse_lazy(&quot;devices:parts_list&quot;)
    # def get_success_url(self):
    #     return self.request.META[&quot;HTTP_REFERER&quot;]

    def form_valid(self, form):
        # if not self.request.is_ajax():
        if self.request.POST.get(&quot;querystring&quot;):
            self.filter = &quot;?&quot; + self.request.POST.get(&quot;querystring&quot;)
        response = super().form_valid(form)
        return response

    def get_success_url(self):
        return reverse_lazy(&quot;devices:parts_list&quot;) + self.filter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예제 처럼 form_valid 에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;self.request.POST 객체에서 내가 원하는 사용자 변수를 미리 뽑아내서 저장하고, form_valid를 리턴해 주는 형태로 구현해 사용중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고하실 분 참고, 물론 내가 참고하겠지만 나중에 기억이 나지 않을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUaCN3/btrAxNYCwYI/2o8HoCZhwrxx1QJK68haxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUaCN3/btrAxNYCwYI/2o8HoCZhwrxx1QJK68haxK/img.jpg&quot; data-alt=&quot;배우는건 기초부터 차근차근&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUaCN3/btrAxNYCwYI/2o8HoCZhwrxx1QJK68haxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUaCN3%2FbtrAxNYCwYI%2F2o8HoCZhwrxx1QJK68haxK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;배우는건 기초부터 차근차근&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@kampus?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Kampus Production&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/6299945/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>FormView</category>
      <category>model</category>
      <category>modelform</category>
      <category>POST</category>
      <category>request</category>
      <category>user</category>
      <category>사용자변수</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/466</guid>
      <comments>https://bthinkr.tistory.com/466#entry466comment</comments>
      <pubDate>Tue, 26 Apr 2022 14:49:14 +0900</pubDate>
    </item>
    <item>
      <title>Django - ORM 쿼리 동시 처리 transaction 적용</title>
      <link>https://bthinkr.tistory.com/465</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일단 안 정보는 적어둬야 한다. SQL는 한번에 하나씩 수행되므로, 하나의 atomic 으로 묶여야 하는 오퍼레이션의 경우에는 처리 방법이 따로 있어야 할 듯 했는데....정답이 있었네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjok1122&amp;amp;logNo=221609547295&quot;&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjok1122&amp;amp;logNo=221609547295&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1650883270674&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python / Django] DetailView, ListView, FormView, Form 활용하기 (오버라이딩, 전달 객체 추가, 인자 추가)&quot; data-og-description=&quot;1. DetailView (Template에 추가 데이터 전달하기) DetailView는 queryset이나 model을 전달받고, url...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjok1122&amp;amp;logNo=221609547295&quot; data-og-url=&quot;https://blog.naver.com/pjok1122/221609547295&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Zp3wU/hyObrAlZMN/ajzvwFlZrf1cQCcsEhZ8UK/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjok1122&amp;amp;logNo=221609547295&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjok1122&amp;amp;logNo=221609547295&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Zp3wU/hyObrAlZMN/ajzvwFlZrf1cQCcsEhZ8UK/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Python / Django] DetailView, ListView, FormView, Form 활용하기 (오버라이딩, 전달 객체 추가, 인자 추가)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. DetailView (Template에 추가 데이터 전달하기) DetailView는 queryset이나 model을 전달받고, url...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1650883311015&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  def clean(self):

        cleaned_data = super().clean()
...
            with transaction.atomic():                            (4)
                order = Order(
                    user=user,
                    product=product,
                    quantity=quantity
                )
                order.save()
                product.stock-=quantity
                product.save()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;(4) &lt;/span&gt;&lt;span style=&quot;background-color: #ffef34; color: #000000;&quot;&gt;transaction.atomic&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;은 여러 개의 SQL 문을 하나의 연산으로 보고 처리하도록 하는 함수입니다. order는 접수가 되었는데, 에러로 인해 상품의 재고가 감소하지 않는 문제점을 사전에 제거합니다. ( 위치는 django.db.transaction에 존재합니다. )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;끝&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2EhAS/btrApmO1ab6/kapQZTfSelskskSnfzv4J0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2EhAS/btrApmO1ab6/kapQZTfSelskskSnfzv4J0/img.jpg&quot; data-alt=&quot;보물같은 자료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2EhAS/btrApmO1ab6/kapQZTfSelskskSnfzv4J0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2EhAS%2FbtrApmO1ab6%2FkapQZTfSelskskSnfzv4J0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;750&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보물같은 자료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@kindelmedia?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Kindel Media&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/8824674/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>atomic</category>
      <category>DB</category>
      <category>ORM</category>
      <category>sql</category>
      <category>Transaction</category>
      <category>동시처리</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/465</guid>
      <comments>https://bthinkr.tistory.com/465#entry465comment</comments>
      <pubDate>Mon, 25 Apr 2022 19:45:15 +0900</pubDate>
    </item>
    <item>
      <title>Django - ORM self reference, 복합 필드로 중복 키 지정</title>
      <link>https://bthinkr.tistory.com/464</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자기 자신의 레코드 중에 하나를 Foreign Key 로 등록하는 경우와 필드를 합쳐서 중복이 생기지 않도록 설정하는 방법을 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길게 설명이 필요없다. 그냥 아래 예제로 끝&lt;/p&gt;
&lt;pre id=&quot;code_1650872482405&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class PartsGroup(models.Model):
    name = models.CharField(max_length=256, verbose_name=&quot;Name&quot;)
    level = models.CharField(max_length=1, default=&quot;0&quot;, verbose_name=&quot;Level&quot;, null=True, blank=True)
    parent = models.ForeignKey(&quot;self&quot;, on_delete=models.PROTECT, verbose_name=&quot;Parent&quot;, null=True, blank=True)
    updated_at = models.DateTimeField(auto_now=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True)

    class Meta:
        constraints = [models.UniqueConstraint(fields=[&quot;name&quot;, &quot;level&quot;], name=&quot;partsgroup-name-unique&quot;)]

    def __str__(self):
        return f&quot;{self.name}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ForeignKey(&quot;self&quot;, ... )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 자기 테이블 내에서 외부키를 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;class Meta 에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;name, level 필드를 합쳐서 중복이 없도록 설정하는 방법을 예제로 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, name 만으로 중복 안되도록 unique를 주게 되면 다른 level 에 동일한 이름을 쓸 수가 없는데, 이렇게 해주면 level이 같은 놈들끼 name이 중복 안되록 해 주게 되므로 편리하게 활용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 팁은 여기까징&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3650&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TmO0r/btrAqr9P2qW/5P5bfEAmUuomz7r6SSTHfK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TmO0r/btrAqr9P2qW/5P5bfEAmUuomz7r6SSTHfK/img.jpg&quot; data-alt=&quot;스위스 루체른 이런데로 가고싶당&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TmO0r/btrAqr9P2qW/5P5bfEAmUuomz7r6SSTHfK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTmO0r%2FbtrAqr9P2qW%2F5P5bfEAmUuomz7r6SSTHfK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3650&quot; height=&quot;2250&quot; data-origin-width=&quot;3650&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스위스 루체른 이런데로 가고싶당&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@bhuwan-dhingra-152723?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Bhuwan Dhingra&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/452544/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>ForeignKey</category>
      <category>ORM</category>
      <category>python</category>
      <category>Reference</category>
      <category>self</category>
      <category>UniqueConstraint</category>
      <category>복합키</category>
      <category>자기참조</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/464</guid>
      <comments>https://bthinkr.tistory.com/464#entry464comment</comments>
      <pubDate>Mon, 25 Apr 2022 16:46:02 +0900</pubDate>
    </item>
    <item>
      <title>Django - Django Bootstrap Modal Forms 라이브러리 2번 호출 막기</title>
      <link>https://bthinkr.tistory.com/463</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;장고에서 Modal 창으로 처리하는 함수들을 위해 Django Bootstrap Modal Forms 라이브러리를 활용하고 있다. 홈페이지는 아래를 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/trco/django-bootstrap-modal-forms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/trco/django-bootstrap-modal-forms&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649917702000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJAX driven forms in Bootstrap modal.&quot; data-og-description=&quot;A Django plugin for creating AJAX driven forms in Bootstrap modal. - GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJAX driven forms in Bootstrap modal.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/trco/django-bootstrap-modal-forms&quot; data-og-url=&quot;https://github.com/trco/django-bootstrap-modal-forms&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEpwRn/hyN1H6gZV3/xC5K5hIGigEXQ63UDMt4tk/img.png?width=1200&amp;amp;height=600&amp;amp;face=1003_155_1076_235&quot;&gt;&lt;a href=&quot;https://github.com/trco/django-bootstrap-modal-forms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/trco/django-bootstrap-modal-forms&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEpwRn/hyN1H6gZV3/xC5K5hIGigEXQ63UDMt4tk/img.png?width=1200&amp;amp;height=600&amp;amp;face=1003_155_1076_235');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJAX driven forms in Bootstrap modal.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Django plugin for creating AJAX driven forms in Bootstrap modal. - GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJAX driven forms in Bootstrap modal.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 막상 사용해 보면, Form submit 이 2번씩 호출되는 것 같다. 확인해 보면 실제 2번씩 호출된다. DB쿼리 같으면 동일한 동작을 2번씩 수행하는 것과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 막고 싶으네. 당연히 이런 질문이 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649917756420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Bootstrap Modal Forms Posting Twice Django&quot; data-og-description=&quot;I am following the instructions from django-bootstrap-modal-forms and what I am finding is that my form is posting or submitting twice when I submit the form. First, the object was simply being cr...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&quot; data-og-url=&quot;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tvSPh/hyN1w4Mjzu/YiV1kCH0YrWRST3O9Dj3l1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/60264166/bootstrap-modal-forms-posting-twice-django&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tvSPh/hyN1w4Mjzu/YiV1kCH0YrWRST3O9Dj3l1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Bootstrap Modal Forms Posting Twice Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am following the instructions from django-bootstrap-modal-forms and what I am finding is that my form is posting or submitting twice when I submit the form. First, the object was simply being cr...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 막는 방법은 아래 예를 참고하자.&lt;/p&gt;
&lt;pre id=&quot;code_1649917619187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class AppCreateView(BSModalCreateView):
    template_name = 'apps/app_create.html'
    form_class = UserAppForm
    success_message = 'Success: App was created.'
    success_url = reverse_lazy('dashboard')

    def form_valid(self, form):
        if not self.request.is_ajax():
            app = form.save(commit=False)
            profile = Profile.objects.get(user=self.request.user)
            app.profile = profile
            app.save()
        return HttpResponseRedirect(self.success_url)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 is_ajax() 함수 값을 보고 False 일때만 처리하도록 한다는 것. 즉 2번 호출 되는 것을 막지는 못했지만 2번 중복 동작을 막는것으로 일단 만족하자&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;007&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdNrT2/btrzps9aoKY/7bxzF3YEYUmgNQr2vISzjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdNrT2/btrzps9aoKY/7bxzF3YEYUmgNQr2vISzjk/img.jpg&quot; data-alt=&quot;유성을 찾아서&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdNrT2/btrzps9aoKY/7bxzF3YEYUmgNQr2vISzjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdNrT2%2Fbtrzps9aoKY%2F7bxzF3YEYUmgNQr2vISzjk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;709&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유성을 찾아서&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@leofallflat?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Yuting Gao&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1567069/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>form</category>
      <category>is_ajax</category>
      <category>Modal</category>
      <category>python</category>
      <category>submit</category>
      <category>twice</category>
      <category>모달</category>
      <category>장고</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/463</guid>
      <comments>https://bthinkr.tistory.com/463#entry463comment</comments>
      <pubDate>Thu, 14 Apr 2022 15:35:45 +0900</pubDate>
    </item>
    <item>
      <title>Django - 다국어 번역 지원하기</title>
      <link>https://bthinkr.tistory.com/462</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서비스를 만들다 보면 여러가지 텍스트가 많이 있다. 한국사람만 쓰면 그냥 한글로 하면 되는데, 국제화 시대에 맞추려면 이런 표기말들은 언어별 테이블에서 가져다 쓸 수 있도록 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친절하게 이런 기능들은 이미 Django 에 내장되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 아래 함수를 먼저 알아야 하고, 그 함수를 라벨이나 다국어가 필요한 곳에는 반드시 적용해 둬야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ugettext 함수나 ugettext_lazy 함수로 라벨을 등록해 두자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649804817312&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _

class Article(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_(&quot;Author&quot;))
    title = models.CharField(max_length=255, default='', null=False, verbose_name=_(&quot;Title&quot;))

...&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ugettext-vs-ugettext_lazy&quot; data-ke-size=&quot;size26&quot;&gt;ugettext vs ugettext_lazy&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Translation 모듈에 있는 ugettext와 ugettext_lazy에는 약간의 차이가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ugettext를 사용해야 하는 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;views.py와 같이 매번 새로 실행되는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ugettext_lazy를 사용해야 하는 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django start-up 때 한번만 실행되는 코드의 경우 (apps.py, models.py, forms.py)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 아래 링크로 가서 보시면 완전 설명 짱!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iam.namjun.kim/django/2019/01/29/django-for-international-service/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://iam.namjun.kim/django/2019/01/29/django-for-international-service/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649804767402&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;세계로 뻗어나가는 웹 서비스를 만들어보자&quot; data-og-description=&quot;Django Translation을 이용한 다국어 지원 방법&quot; data-og-host=&quot;iam.namjun.kim&quot; data-og-source-url=&quot;https://iam.namjun.kim/django/2019/01/29/django-for-international-service/&quot; data-og-url=&quot;http://iam.namjun.kim/django/2019/01/29/django-for-international-service/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://iam.namjun.kim/django/2019/01/29/django-for-international-service/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iam.namjun.kim/django/2019/01/29/django-for-international-service/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;세계로 뻗어나가는 웹 서비스를 만들어보자&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Django Translation을 이용한 다국어 지원 방법&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iam.namjun.kim&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z68JO/btrzcSav9tm/oDqcLIIsQJ8jMmhCHAHMCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z68JO/btrzcSav9tm/oDqcLIIsQJ8jMmhCHAHMCk/img.jpg&quot; data-alt=&quot;사전의 중요성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z68JO/btrzcSav9tm/oDqcLIIsQJ8jMmhCHAHMCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ68JO%2FbtrzcSav9tm%2FoDqcLIIsQJ8jMmhCHAHMCk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사전의 중요성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@pixabay?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pixabay&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/bokeh-267669/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>Django</category>
      <category>translate</category>
      <category>ugettext</category>
      <category>ugettext_lazy</category>
      <category>국제화</category>
      <category>다국어</category>
      <category>영어</category>
      <category>파이썬</category>
      <category>한글</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/462</guid>
      <comments>https://bthinkr.tistory.com/462#entry462comment</comments>
      <pubDate>Wed, 13 Apr 2022 08:09:59 +0900</pubDate>
    </item>
    <item>
      <title>Django - Form 태그에 속성 값 추가하기</title>
      <link>https://bthinkr.tistory.com/461</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;html form 필드에 다양한 속성값을 주고 싶다...이건 기본이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고 폼을 쓰면서 이런 속성을 쉽게 줄 수 있는 방법은 다양하게 있겠지만 그냥 아래 글 처럼 속성을 주는 것이 편할 듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span&gt;이글을 참고하시길 =&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://dgkim5360.tistory.com/entry/django-form-style-manipulation?category=892553&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Django Form에서 DOM class 설정 등의 front-end 조작법&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649720692808&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# myapp/forms.py

class MyForm( forms.ModelForm ):
  class Meta:
    model = MyModel

    def __init__( self, *args, **kwargs ):
        super( MyForm, self ).__init__( *args, **kwargs )
        self.field[ 'my_field' ].widget.attrs.update( {
            'class': 'form-control',
            'id': 'form-id',
            'placeholder': 'Do not use numbers.' } )



출처: https://dgkim5360.tistory.com/entry/django-form-style-manipulation?category=892553 [개발새발로그]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;그리고, 기존에 하던 방식 그냥 Meta 클래스에 기록해 둬도 되네&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649730318892&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyForm( forms.ModelForm ):
    class Meta:
        model = MyModel
        fields = [&quot;company&quot;]
        labels = {
            &quot;company&quot;: _(&quot;거래처 선택&quot;),
        }
        widgets = {
            &quot;company&quot;: forms.Select(attrs={&quot;class&quot;: &quot;form-control&quot;, &quot;placeholder&quot;: &quot;&quot;, &quot;style&quot;:&quot;width: 100%;&quot;}),
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;그리고, 추가로 속성값 없이 속성 키 만 있는 것은 그냥 True, False 로 주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&quot;Required&quot;:True&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;이런식으로 속성에 주면 실제 html 에는&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;lt;input .... required&amp;gt; 이렇게 나오게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;ㄲㅡㅌ&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DefVE/btry8izWLys/yPjSvB8nmDSKUZY0eknSrK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DefVE/btry8izWLys/yPjSvB8nmDSKUZY0eknSrK/img.jpg&quot; data-alt=&quot;틀로 막 찍어낼 수 있도록 코딩 라이브러리가 잘되어 있으면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DefVE/btry8izWLys/yPjSvB8nmDSKUZY0eknSrK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDefVE%2Fbtry8izWLys%2FyPjSvB8nmDSKUZY0eknSrK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;750&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;틀로 막 찍어낼 수 있도록 코딩 라이브러리가 잘되어 있으면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@ella-pix-66469?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Ella Pix&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/237696/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>속성</category>
      <category>장고</category>
      <category>폼</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/461</guid>
      <comments>https://bthinkr.tistory.com/461#entry461comment</comments>
      <pubDate>Tue, 12 Apr 2022 08:50:37 +0900</pubDate>
    </item>
    <item>
      <title>Django - Ninja API 인증에 Redis 추가로 blacklist 구현</title>
      <link>https://bthinkr.tistory.com/460</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;제목이 거창한데&amp;nbsp; Django Ninja API 엔진에 기본 인증 방식에 Redis 를 이용하여 사용자별 JWT 토큰 값을 하나만 관리하도록 설정해 보았다. 머 Blacklist 비슷한거 아닌가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 한 후에 Redis 에 사용자 ID 키로 토큰을 저장해 두고, 다시 Login API가 호출되면 새로운 token이 발행되도록 한다. 이렇게 하면 사용기한이 남은 토큰이라도 재 발행되는 순간 쓸 수가 없게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 대신에 그냥 Session 정도 사용되도 될 듯 하지만 머 일단 구색으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649663397676&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class AuthBearer(HttpBearer):
    def authenticate(self, request, token):
        try:
            print(request.headers)
            print(request.headers[&quot;User-Agent&quot;])
            a = jwt.decode(token, SECRET_KEY, algorithms=&quot;HS256&quot;)
            user = User.objects.filter(id=a[&quot;id&quot;]).get()
            get_token = cache.get(a[&quot;id&quot;])
            print(get_token)
            if get_token == token:
                return a
        except Exception:
            print(&quot;Exception - &quot;, Exception)
            
        return False&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 토큰을 확인해 보고 이상이 없더라도 Redis 에 저장된 토큰이랑 한 번 더 비교하도록 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API에 적용시키는 방법은 &lt;a href=&quot;https://django-ninja.rest-framework.com/tutorial/authentication/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Ninja API 매뉴얼&lt;/a&gt;에 있듯이 아래처럼&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649663467932&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@api.get(&quot;product&quot;, response=ProductOutListSchema, auth=AuthBearer())
# @login_required(login_url=&quot;/api/v1/error&quot;)
def list_product(request, q: QueryStringItem = Query(...)):
    print(&quot;=== list_productbyuser ===&quot;, request, q.dict(), request.auth)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis 설치후에 장고 쪽에 라이브러리를 설치하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;pip&amp;nbsp;install&amp;nbsp;django-redis&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/jazzband/django-redis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jazzband/django-redis&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649663774094&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - jazzband/django-redis: Full featured redis cache backend for Django.&quot; data-og-description=&quot;Full featured redis cache backend for Django. Contribute to jazzband/django-redis development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jazzband/django-redis&quot; data-og-url=&quot;https://github.com/jazzband/django-redis&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cOQxaj/hyN0h6Mb2p/45XAKHxIHt0YQ2CVaDNJJK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/jazzband/django-redis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jazzband/django-redis&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cOQxaj/hyN0h6Mb2p/45XAKHxIHt0YQ2CVaDNJJK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jazzband/django-redis: Full featured redis cache backend for Django.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Full featured redis cache backend for Django. Contribute to jazzband/django-redis development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;settings.py 에 아래 문구를 참고해서 설정해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1649663521763&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# CACHE
CACHE_LOCATION = &quot;redis://&quot; + os.environ.get(&quot;CACHE_HOST&quot;, &quot;127.0.0.1&quot;) + &quot;:&quot; + os.environ.get(&quot;CACHE_PORT&quot;, &quot;6379&quot;) + &quot;/1&quot;
print(CACHE_LOCATION)

CACHES = {
    &quot;default&quot;: {
        &quot;BACKEND&quot;: &quot;django_redis.cache.RedisCache&quot;,
        &quot;LOCATION&quot;: CACHE_LOCATION,
        &quot;OPTIONS&quot;: {
            &quot;CLIENT_CLASS&quot;: &quot;django_redis.client.DefaultClient&quot;,
        },
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장고에서 Redis cache 의 기본 사용법은 아래 링크 글이 좋더라 참고하세요 :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@jiffydev/Django-16.-Django-django-redis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@jiffydev/Django-16.-Django-django-redis&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649663842568&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Django 16. Django &amp;amp; django-redis&quot; data-og-description=&quot;1. Redis란? &amp;gt; Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key&amp;ndash;value database with opt&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@jiffydev/Django-16.-Django-django-redis&quot; data-og-url=&quot;https://velog.io/@jiffydev/Django-16.-Django-django-redis&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/k7IpO/hyN0b6zMJg/7LCG0kspAV1ejSViVGwAl0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bOgwmr/hyN0rauJpG/vKMQF0g2CuNoHU28OBcm6K/img.png?width=1214&amp;amp;height=602&amp;amp;face=0_0_1214_602,https://scrap.kakaocdn.net/dn/kMRLs/hyN0qbA1QK/bTIc2oSA0mcfvqHVH6LMc0/img.jpg?width=1001&amp;amp;height=667&amp;amp;face=0_0_1001_667&quot;&gt;&lt;a href=&quot;https://velog.io/@jiffydev/Django-16.-Django-django-redis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@jiffydev/Django-16.-Django-django-redis&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/k7IpO/hyN0b6zMJg/7LCG0kspAV1ejSViVGwAl0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bOgwmr/hyN0rauJpG/vKMQF0g2CuNoHU28OBcm6K/img.png?width=1214&amp;amp;height=602&amp;amp;face=0_0_1214_602,https://scrap.kakaocdn.net/dn/kMRLs/hyN0qbA1QK/bTIc2oSA0mcfvqHVH6LMc0/img.jpg?width=1001&amp;amp;height=667&amp;amp;face=0_0_1001_667');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Django 16. Django &amp;amp; django-redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Redis란? &amp;gt; Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key&amp;ndash;value database with opt&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uqHyt/btry4SVYv9X/cxc4bUusfOTjHwoqPVyYl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uqHyt/btry4SVYv9X/cxc4bUusfOTjHwoqPVyYl0/img.jpg&quot; data-alt=&quot;해가 좋던데 바다 보며 쉬고 싶당&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uqHyt/btry4SVYv9X/cxc4bUusfOTjHwoqPVyYl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuqHyt%2Fbtry4SVYv9X%2Fcxc4bUusfOTjHwoqPVyYl0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;709&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해가 좋던데 바다 보며 쉬고 싶당&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@george-desipris?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;GEORGE DESIPRIS&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/1266223/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>AuthBearer</category>
      <category>Authentication</category>
      <category>Blasklist</category>
      <category>Django</category>
      <category>JWT</category>
      <category>login</category>
      <category>Ninja</category>
      <category>Redis</category>
      <category>인증</category>
      <category>파이썬</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/460</guid>
      <comments>https://bthinkr.tistory.com/460#entry460comment</comments>
      <pubDate>Mon, 11 Apr 2022 16:55:38 +0900</pubDate>
    </item>
    <item>
      <title>Django -  파이썬 zip 파일 생성 from 메모리 버퍼</title>
      <link>https://bthinkr.tistory.com/459</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파일 생성을 임의로 막 할 수 없기에 메모리상에 데이터를 zip 으로 묶어서 다운로드 해야 하는 경우가 생긴다. 대부분의 예제들이 파일을 기반으로 되어 있어서 response 로 바로 내려주는 것을 찾기 어려웠는데, 아주 좋은 예제가 있어서 소개한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 많은 곳을 거쳐서 테스트 했는데 아래 코드가 그나마 동작 가능한 코드이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/67454/serving-dynamically-generated-zip-archives-in-django&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/67454/serving-dynamically-generated-zip-archives-in-django&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import io

def my_downloadable_zip(request):
    zip_io = io.BytesIO()
    with zipfile.ZipFile(zip_io, mode='w', compression=zipfile.ZIP_DEFLATED) as backup_zip:
        backup_zip.write('file_name_loc_to_zip') # u can also make use of list of filename location
                                                 # and do some iteration over it
     response = HttpResponse(zip_io.getvalue(), content_type='application/x-zip-compressed')
     response['Content-Disposition'] = 'attachment; filename=%s' % 'your_zipfilename' + &quot;.zip&quot;
     response['Content-Length'] = zip_io.tell()
     return response&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내생각에는 BytesIO.tell() 이라는 함수가 있는 것을 알고 Content-Length 에 채워주는 것이 핵심 포인트 인듯 하다.&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br0m9V/btryDQj5QbH/WvP8WhTgg8owwGTKA8mtJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br0m9V/btryDQj5QbH/WvP8WhTgg8owwGTKA8mtJk/img.jpg&quot; data-alt=&quot;미래를 말씀해주세요 :)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br0m9V/btryDQj5QbH/WvP8WhTgg8owwGTKA8mtJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr0m9V%2FbtryDQj5QbH%2FWvP8WhTgg8owwGTKA8mtJk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1123&quot; height=&quot;750&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;미래를 말씀해주세요 :)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@pavel-danilyuk?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pavel Danilyuk&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/7221640/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>bytesio</category>
      <category>stringsio</category>
      <category>zip</category>
      <category>zipfile</category>
      <category>다운로드</category>
      <category>메모리</category>
      <category>버퍼</category>
      <category>장고</category>
      <category>파이썬</category>
      <category>파일생성</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/459</guid>
      <comments>https://bthinkr.tistory.com/459#entry459comment</comments>
      <pubDate>Thu, 7 Apr 2022 11:12:08 +0900</pubDate>
    </item>
    <item>
      <title>Django - 데코레이터 적용 하는 방법 - FBV, CBV</title>
      <link>https://bthinkr.tistory.com/458</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;전처리, 혹은 사용자가 중복으로 필요한 기능을 모아서 데코레이터로 작성해 두는 경우가 많다. 대부부의 함수에 적용시키거나 특정 함수에서 필요한 기능을 부분부분 적용시키는 데 최적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 만들고 나면 대상 함수, 클래스에 적용하는 방법을 알아야 한다. Fuction based view 와 Class based view 에 적용 방법이 각각 다르다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사이트에 아주 잘 설명이 되어 있다. 원본 사이트로 들어가서 보시면 제 맘에 부담이 덜하겠네요 공부하는 것을 기록해 두는 용도지만 작성자의 노고를 위해서는 사이트로 가서 봐줘요&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://parkhyeonchae.github.io/2020/03/25/django-project-05/#2-decorator-%EC%A0%81%EC%9A%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://parkhyeonchae.github.io/2020/03/25/django-project-05/#2-decorator-%EC%A0%81%EC%9A%A9&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;010&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/010.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 정리해보면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 FBV 에서 적용은 그냥 @데코레이터이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@login_message_required &lt;br /&gt;def&amp;nbsp;example_def(request): &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;CBV 에서는 약간 다르네&amp;nbsp;&lt;/div&gt;
&lt;div&gt;method_decorator 란 놈을 import 해서, 이를 이용해서 적용할 수 있네.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;from&amp;nbsp;django.utils.decorators&amp;nbsp;import&amp;nbsp;method_decorator&lt;/div&gt;
&lt;div&gt;@method_decorator(logout_message_required, name='dispatch') &lt;br /&gt;class&amp;nbsp;ExampleClass(View): &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6djp1/btrypjelcnZ/uWxk9ehAgMW0z6t8j7QrY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6djp1/btrypjelcnZ/uWxk9ehAgMW0z6t8j7QrY0/img.jpg&quot; data-alt=&quot;어휴 뷰가 그냥.. 태우면서 자고 싶은 해변가 장식이 필요없는 뷰뷰&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6djp1/btrypjelcnZ/uWxk9ehAgMW0z6t8j7QrY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6djp1%2FbtrypjelcnZ%2FuWxk9ehAgMW0z6t8j7QrY0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;750&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어휴 뷰가 그냥.. 태우면서 자고 싶은 해변가 장식이 필요없는 뷰뷰&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/@ben-mack?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Ben Mack&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #e8e8e8; color: #1a1a1a;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;님의 사진, 출처:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;https://www.pexels.com/ko-kr/photo/6775268/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels&quot;&gt;Pexels&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Tech/Django</category>
      <category>CBV</category>
      <category>Decorator</category>
      <category>Django</category>
      <category>FBV</category>
      <category>login_required</category>
      <category>method_decorator</category>
      <category>데코레이터</category>
      <author>키블럭</author>
      <guid isPermaLink="true">https://bthinkr.tistory.com/458</guid>
      <comments>https://bthinkr.tistory.com/458#entry458comment</comments>
      <pubDate>Mon, 4 Apr 2022 10:48:14 +0900</pubDate>
    </item>
  </channel>
</rss>