728x90
반응형
디버그 모드의 특수 케이스 URL
URL 패턴을 동적으로 생성하는 방법, DEBUG 설정이 True로 되어 있어야함
# views.py
from django.http import HttpResponse as HR
def debug(request):
return HR('<h1>추가된 페이지</h1>')
# urls.py
from django.urls import re_path
from django.conf import settings
if settings.DEBUG:
urlpatterns +=[re_path(r'^debuginfo/$',debug)]
원시 쿼리 실행
모델 객체.objects.raw(raw_query, params=None, translations=None)으로 원시 쿼리를 수행할 수 있음
Publisher.objects.raw('SELECT * FROM books_publisher')
# Publisher.objects.all() 실행 결과와 같음
이 코드는 django.db.models.query.RawQuerySet 인스턴스를 반환함, for 반복문 등을 통해 레코드를 추출할 수 있음
사용자 정의 SQL 직접 실행
raw만으로 충분하지 않고 모델에 완전히 매핑되지 않은 쿼리 수행, UPDATE, INSERT, DELETE 등을 직접해야 할 때도 있음
이러한 경우 Django는 django.db.connection로 모델 계층을 전체적으로 라우팅해 데이터베이스에 직접 액세스 할 수 있음
- 연결
from django.db import connection
cur = connection.cursor()
- 쿼리 수행
# execute(sql, [params])
cur.execute("UPDATE books_publisher SET name='Pupbani2' WHERE name = 'Pupbani1'")
# 파라미터 전달
cur.execute("SELECT * FROM books_publisher WHERE city = %s",['Dongtan'])
- 결과 반환
rows = cur.fetchall()
for row in rows:
print(row[0],row[1],row[2],row[3],row[4],row[5],row[6])
- 커밋
connection.commit()
- 롤백
connection.rollback()
- 연결 종료
connection.close()
사용자 인증
Django는 세션과 미들웨어를 사용해 인증 시스템을 요청 객체에 연결함
현재 사용자를 표현하는 모든 요청에 대해 request.user 속성을 제공
- 사용자가 로그인하지 않은 경우 - AnonymousUser 인스턴스로 설정
- 사용자가 로그인 한경우 - User 인스턴스 설정
다음과 같은 코드로 인증된 사용자에 대한 작업을 실행할 수 있음
- 이 코드를 사용해 로그인한 사용자와 아닌 사용자가 사용하는 뷰를 다르게 표시할 수 있음
if request.user.is_authenticated():
# 인증된 사용자일 경우
else :
# 익명 사용자일 경우
Django 뷰에서 사용자 로그인을 하는 방법은 다음과 같은 방법을 권장함
- login()은 Django의 세션 프레임워크를 활용함
from Django.contrib.auth import authenticate, login
def login_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request,user)
# 성공 웹 페이지로 이동
else :
# '사용 중지된 계정' 오류 메시지 반환
else :
# '잘못된 로그인' 오류 메시지 반환
로그아웃은 다음과 같음
from Django.contrib.auth import logout
def logout(request):
logout(request)
# 성공 페이지로 리디렉션
사용자를 추가하는 방법은 다음과 같음
from Django.contrib.auth.models import User
user = User.objects.create_user('name','email','password')
# 이 시점에서 user는 이미 데이터베이스에 저장된 User 객체
user.save()
728x90
반응형
'Back-end & Server > Django' 카테고리의 다른 글
[Django] 배포 (0) | 2023.01.31 |
---|---|
[Django] 테스팅 (0) | 2023.01.22 |
[Django] 폼(Form) (0) | 2023.01.20 |
[Django] Admin 사이트 (0) | 2023.01.16 |
[Django] 모델 (0) | 2023.01.16 |