본문 바로가기

TIL/Python

(34)
[django project] 4. 게시글 검색, 정렬 오늘은 게시글 검색과 정렬 기능을 구현했다. template 정렬 조회수 좋아요 GET요청으로 url에 정보를 담아 정렬을 시킬 수 있다. 조회수를 누르면 url = "sort=views" 좋아요를 누르면 url = "sort=likes" request.GET에 담아서 views로 보내준다. views def home(request): page = request.GET.get('page', '1') sort_option = request.GET.get('sort') if sort_option == 'views': products = Product.objects.all().order_by('-views') elif sort_option == 'likes': products = Product.objects...
[django project] 3. Pagination 장고에서는 페이지네이션 기능을 지원하고 있다. 자세한건 공식문서 https://docs.djangoproject.com/en/5.0/ref/paginator/ 나는 내가 사용한 메서드만 적어놓겠다. views.py from django.shortcuts import render from products.models import Product from django.core.paginator import Paginator def home(request): page = request.GET.get('page', '1') product_list = Product.objects.all().order_by("-pk") paginator = Paginator(product_list, 6) page_obj = pagi..
[django project] 2. User Custom, Validator, Form AbstractBaseUser를 상속받아서 User 모델을 커스텀하고 사용하다가 Id, Password 유효성 검사를 넣고 싶어서 UnicodeUsernameValidator()를 사용하고 테스트 해보니 유효성 검사가 전혀 되질 않아서 이것저것 찾아보았다. 커스텀한 User 모델 class User(AbstractBaseUser, PermissionsMixin): username_validator = UnicodeUsernameValidator() username = models.CharField( ("username"), max_length=20, unique=True, validators=[username_validator], error_messages={ "unique": ("A user with ..
[django project] 1. 회원가입, 탈퇴, 로그인, 로그아웃 구현 https://github.com/HyunHyoMin/spartamarket GitHub - HyunHyoMin/spartamarket Contribute to HyunHyoMin/spartamarket development by creating an account on GitHub. github.com DB table 홈, 프로필 페이지 구현 User : 회원가입, 회원탈퇴, 로그인, 로그아웃 구현 Product : Create, Read 구현 Comment : 미구현 Home 스파르타 마켓 클릭하면 Home으로 이동 카드 클릭하면 해당 products/product.id/detail 로 이동 로그인, 로그아웃 가능 로그인 시 프로필 이동 가능 회원가입, 로그인 회원가입 시 자동 로그인 로그인 시 세션..
[Python] 파이썬 설치 경로 / 다른 버전의 파이썬을 가상 환경에서 실행하기 Django 학습 주차에 들어가며 개발환경 구성을 하는데 강의에서 3.10이나 3.9 버전을 사용한다는데 나는 3.8 버전이라 3.10.11을 새롭게 설치했다. 그런데 설치하고 VSC를 실행시키니 이전 버전 파이썬이 작동하는 것! 그래서 새로운 버전 파이썬을 실행시키는 방법을 찾아보았다. 찾은 방법은 두가지 1. 파이썬 패스 경로 설정(windows 기준) 제어판 > 시스템 > 고급 시스템 설정 > 환경변수 > 환경변수 Path 편집 원하는 python 버전 설치 경로와 내부에 있는 Scripts 설치 경로를 추가해서 위로 올려준다. 경로 확인 방법 powershell python import sys sys.executable 파이썬 버전 Scripts 환경변수 Path 편집 원하는 버전의 경로를 넣어주..
[Python] Django. csrf_token CSRF(Cross Site Request Forgery) 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등) 를 특정 웹사이트에 요청하게 하는 공격 이미 사용자가 접속한 상황에서 요청값을 조작하여 사용자가 원하지 않는 action을 보내 웹 어플리케이션을 악용 사용자의 권한에 따라 위험성이 달라짐 CSRF 공격 과정 사용자가 웹사이트에 로그인하여 정상적인 쿠기를 발급받는다. 해당 쿠키는 사용자를 인식하고, 인증하는 정보를 포함 공격자가 링크를 이메일이나 게시판 등의 경로를 통해 이용자에게 전달 공격용 HTML 페이지는 이미지 태그를 포함 대부분의 웹사이트가 이미지 태그를 필터링하지 않거나, 못하기 때문에 특히 취약하다. 사용자가 해당 링크를 ..
[Python] Flask 페이지네이션 #HTML {% for post in posts %} {{ post['title'] }} {% endfor %} {{ pagination.links | safe }} pagination.links Flask-paginate에서 pagination 객체를 만들어서 넘겨주면, 객체가 갖고있는 links라는 attribute가 바로 우리가 원하는 그 각 페이지로 갈 수 있는 링크 부분입니다. 내부적으로는 우리가 구현하고싶은 html 덩어리를 추상화해놓았습니다. 만약 Flask-paginate를 사용하지 않았다면 여기가 엄청 복잡해졌겠죠. 다만, safe를 걸어주어서, 안전한 객체가 전달되었으니 브라우저 상에서 실행해도 괜찮다~ 라고 브라우저를 안심시켜줘야 html 위에 보이게 할 수 있습니다. from fla..
[Python] Flask SQLite 권한 별 게시글 수정 'posts' 테이블에 Foreign key로 username을 주고 'users' 테이블의 'username' 열에 연결한다. FOREIGN KEY(username) REFERENCES users(username) 'posts' 테이블의 'username' 열이 'users' 테이블의 'username' 열을 참조한다는 것을 의미한다. 따라서 'username' 열의 값은 'users' 테이블에 존재하는 값만 가질 수 있게 된다. #models.py import sqlite3 DATABASE = 'database.db' def create_table_posts(): conn = sqlite3.connect(DATABASE) cur = conn.cursor() cur.execute(''' CREATE T..
[Python] Flask로 회원가입, 로그인 구현하기 회원가입 1. DB에 id로 쓸 username과 password를 넣어줄 users 테이블 생성 2. HTML에서 username과 password를 POST로 받아와 DB에 넣어준다. 로그인 1. POST로 username과 password를 받아온다. 2. DB에 해당 username 데이터가 있는지 확인 3. username이 있다면 password 일치 여부 확인 4.session['logged_in'] = True / session['username'] = username 을 넣어준다. 로그아웃 session에서 logged_in 과 username 키의 값을 pop 해준다. from flask import Flask, request, redirect, render_template, abort..
[Python] Django 튜토리얼 Django Flask와 같은 웹 프레임워크의 일종이다. Django의 구조 Django는 Model - Template - View 패턴을 사용한다. MTV 패턴이란? Django는 여러개의 app을 활용하여 하나의 웹을 만들게 된다. app을 하나의 작은 페이지 단위라고 생각하면 이해하기 편하다. 전체적으로 관리해야 할 것 URL : 각 페이지의 역할을 정의한다. URL별로 어떤 template을 띄워줄 것인지 결정하게 된다. Settings : 사용가능한 app의 목록, 템플릿 등을 지정한다. app별로 관리해야 할 것 Template : 각 페이지의 기본 모습을 관리한다. (html을 활용하여 작성하게 된다.) View : request에 대한 처리 필요, 데이터베이스를 여기서 관리한다. Mode..