Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- vscode cp949
- 99일지
- 파이썬 map 함수
- 항해99
- 개발자스터디
- 항해
- 10430번
- fatal:not a git repository
- 파이썬 |
- 백준
- MomentumParameters
- 파이썬 int()
- 99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #til
- 코딩테스트
- Til
- 코딩부트캠프후기
- not a git repository
- 개발자사이드프로젝트
- 주니어개발자역량강화
- cp949
- 99클럽
- 주니어개발자멘토링
- 파이썬 클래스
- 파이썬 sep
- 항해플러스
- print("""
- print sep
- EnvCommandError
- Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Archives
- Today
- Total
선발대
[스파르타] Django 기초반 2주차 (완강) 본문
1. 수업 후기
- 강의 개수: 9개
- 총 강의시간: 1시간 44분
- 수업 목표:
- 1. Django의 구조를 알아보고, 필요한 기초 명령들을 익혀본다.
- 2. 데이터베이스를 연결하고, 데이터베이스를 사용하는 방법을 알아본다.
- 3. 사용자 모델을 만들고, 회원가입과 로그인 기능을 직접 만든다.
안녕하슈크림
2. 수업내용 정리
2-1. 2주차 이번주 배울 것
더보기
- Django 실행, 관리를 위한 명령어 알아보기
- Django ORM 알아보고 DB와 연동하여 사용해보기
- Admin 기능 알아보기
- 사용자 모델 만들고 사용자 관리 기능을 구현해보기 (회원가입 / 로그인)
2-2. 프로젝트 구조 만들기
더보기
01. 장고가 일하는 순서
- user ←→ URL Conf, Template ←→ View ←→ Model (ORM) ←→ DB
- 우리가 주로 작성할 곳은 URL, View.
- URL: 사용자가 어떤 주소로 접근할 수 있게 정해주는 공간 (url.py)
- View: URL에서 어떤 기능, 역할을 할 것인지 만들어주는 공간 (views.py)
02. 프로젝트 구조 만들기
- SNS 만들기
- 사용자 관리 (회원가입 / 로그인 / 로그아웃)
- 글쓰기
- 친구 만들기
$ django-admin startapp user
$ django-admin startapp tweet
- app 생성 (위의 명령어)
- user앱: 사용자 관리 (회원가입 / 로그인 / 로그아웃)을 담당
- tweet앱: 글 관리 (글쓰기, 삭제, 수정, 댓글)을 담당
- 터미널에서 입력하기 전에 가상환경에서 실행 중인지 확인 필요.
03. 프로젝트 세팅하기
- mySpartaSns: 프로젝트를 관리하는 모든 정보들을 갖고 있는 곳
- app 만들면 setting.py에 추가해야 함.
- setting.py: Django가 서버 실행하면서 알아야 할 정보들을 적어줘야 함.
# 새로운 앱을 만들었다고 장고에게 말해준다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tweet',
'user',
]
2-3. 데이터베이스와 Django ORM 알아보기
더보기
01. 데이터베이스 연결하기
- Django와 데이터베이스를 연동하고, PyCharm에서 데이터베이스 확인해보기
- 장고 한번이라도 실행하면 setting.py에 있는 DATABASES 정보로 DB와 자동 연동함.
- db.sqlite3이 생성되었는지 확인하기: 있으면 데이터베이스 연결이 잘 되어있구나~
- 눈으로 확인하기 위해 아래의 과정 진행.
- 데이터베이스를 한 눈에 볼 수 있도록 파이참이 도와주는 도구
- 우측의 Database를 눌러 연결하기 - Data Source from Path - db.sqlite3
- 한번 해두면 앞으로 데이터베이스 생성될 때마다 옆에서 확인 가능함
02. ORM이란?
- ORM(Object Relational Mapping): DB를 하나의 '객체(Object)' 덩어리로 보고,
- 데이터베이스를 SQL언어가 아닌 클래스로 쉽게 표현 및 사용할 수 있게 해준다.
- 클래스 이름, 내부에 선언된 변수들이 '비슷한 성격'들을 가지고 있음.
- 파이썬을 이용해서 데이터를 다룰 수 있게 함.
- 원래 일반적으로는 SQL언어를 이용해서 DB를 다뤘음.
03. User Model 만들기
- Django는 기본적으로 User 모델 제공. 사용자의 관리, 로그인, 로그아웃이 이미 다 구현되어있음.
- Django에서 제공하는 models.py를 사용해서 각 요소의 데이터 형식, 각 필드에 제한을 두었음.
- Django 모델 필드의 종류: 외우지 말고 눈으로만 익히기
문자열 : CharField, TextField
날짜/시간: DateTimeField, DateField, TimeField
숫자 : IntegerField, FloatField
다른 테이블과 연관을 지어 줄 때 : ForeignKey
04. 만든 모델 데이터베이스에 넣기
- 방금 우리가 열심히 만든 User Model을 데이터베이스에 넣어주려고 함.
- 1. makemigrations: 데이터베이스 변경을 알려주는 명령어
- 터미널: python manage.py makemigrations
- 2. migrate: 변경된 데이터베이스를 적용시켜주는 명령어
- 터미널: python manage.py migrate
2-4. Django Admin - admin 기능 맛보기
더보기
01. createupseruser
- 장고는 이미 구현된 많은 기능들이 있는데 그 중 대표적인 것이 Admin임.
- http://127.0.0.1:8000/admin (관리자 페이지 접속하기)
- Django에서 제공하는 super user를 만들어야 admin 페이지에 접근 가능.
- 서버 끄고, python manage.py createsuperuser 터미널 입력.
- 관리자 계정 만드는 것 이어서 입력. (패스워드는 화면에 안 나옴)
02. admin 화면
- Site administration: admin이 우리에게 제공하는 기능들을 볼 수 있음.
- Admin 페이지에 들어가서 Users를 보면 우리가 방금 생성한 관리자가 들어있음.
- Django에서 기본적으로 제공하는 User 모델임.
03. 우리의 모델 등록
- User앱 > admin.py > 우리가 아까 만든 UserModel 넣어주기:
from django.contrib import admin
from .models import UserModel
# Register your models here.
admin.site.register(UserModel) # 이 코드가 나의 UserModel을 Admin에 추가해준다.
- Admin 페이지에서 새로고침하면 UserModel 들어간 것을 확인할 수 있음.
2-5. ORM의 활용과 Admin 익숙해지기
더보기
01. Tweet 모델 만들기
- user 앱에서 작업했으니, 이번에는 tweet 앱에서 작업하기
- SNS 게시글에 필요한 기능: 작성자, 내용, 글 생성일자, 수정일자
- tweet앱 > models.py
# tweet/models.py
from django.db import models
from user.models import UserModel
# Create your models here.
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
# ForeignKey: 외부 모델 가져와서 사용하겠다는 의미
# author은 User Model의 사용자가 작성한 글임
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
02. 데이터베이스에 알려주고 적용하기
- 모델을 만들었으면 데이터베이스에도 알려줘야 함.
- 서버 끄고 아래 명령어들 입력.
- python manage.py makemigrations
- python manage.py migrate
- 입력 후 다시 서버 실행.
- DB 확인.
03. admin에 넣어주기
- admin 페이지에서 볼 수 있도록 작성.
- tweet앱 > admin.py > admin에 추가하는 코드 작성
from django.contrib import admin
from .models import TweetModel
# Register your models here.
admin.site.register(TweetModel)
- http://127.0.0.1:8000/admin : 페이지에서 tweet 모델이 추가된 것을 확인할 수 있음.
2-6. 사용자 관리와 로그인 - 화면 띄우기
더보기
01. 템플릿 만들기 (HTML 작성하기)
- user - signin.html, signup.html
- base.html
- { % : 장고에서 말하는 템플릿 문법.
- 우리가 중복해서 html 계속 작성하지 않고 html에 파이썬 기능들을 추가해줄 수 있는 문법들.
02. url - view - template 이어주기
- 장고 MVT 패턴: M(Modle), T(Template), V(View)
- 사용자가 url 요청 > 브라우저 > MySpartaSns > setting.py가 있는 앱의 urls.py > 연결앱 urls.py > view
- mySpartaSns > urls.py: path('', include('user.urls'))
- user의 urls.py에 연결할 user앱의 views.py 작성.
- views.py: render로 html 파일 연결해주는 것
- 작성한 views.py를 urls.py에 연결해주기
- user/urls.py: path로 주소랑 실행할 함수 적어준다.
2-7. 사용자 관리와 로그인 - 회원가입 기능 만들기
더보기
01. 어떻게 만들 것인가?
- 회원가입 페이지 url: sign-up, GET
- 가입정보 입력, 전송 url: sign-up, POST
- GET, POST 둘 다 인터넷으로 통신하는 방법들
- GET: 값 읽어올 때 사용
- POST: 값을 주거나 수정, 삭제 요청할 때 사용
02. user의 views.py sign_up_view에 POST 추가하기
- HTTP 요청 방식을 구분하는 코드를 추가함.
# user/views.py
def sign_up_view(request):
if request.method == 'GET': # GET 메서드로 요청이 들어 올 경우
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST 메서드로 요청이 들어 올 경우
return ""
03. HTML에서 form 태그 설정
- <form> 태그는 화면에 있는 데이터를 서버로 보내줄 때 사용함. (html에서 서버로)
- signup.html의 <form>태그 속성에 method(POST, GET)와 action(보낼 URL)을 추가함.
- action 뒤에 / 없으면 오류남.
<!-- 윗 부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
- {% csrf_token %}: Django에서 POST로 데이터 전송할 때 보안을 위해 자주 사용해줘야 함.
- <input>태그들의 id, name들을 잘 기억하기. name을 서버로 전송함.
- <form>태그 안의 <button> type = "submit"은 form을 실행시켜주는 역할.
- POST 방식으로, action의 URL로.
04. user의 views.py에서 전송되는 데이터 받아서 저장하기
- 화면에서 사용자 정보를 받아서 model에 저장해야 함. 따라서 UserModel 데이터베이스에 저장.
- html의 input에 입력한 친구들은 user / views.py / sign_up_view() 함수로 들어감.
- sign_up_view() 함수에서 데이터 받아오고, 패스워드 확인.
- new_user을 UserModel()의 빵틀로 찍어내고, 거기에 새로운 데이터들 입력함.
- new_user.save() 하면 DB에 저장됨.
- redirect 함수 이용하면 로그인 페이지 /sign-in url로 이동시켜줌.
- 이거 이용하면 회원가입 페이지 말고 로그인 페이지로 가는 것임.
2-8. 사용자 관리와 로그인 - 로그인 기능 만들기
더보기
01. url, view 세팅하기
- 세션: 사용자의 정보를 저장하는 공간. 같은 사람이 요청을 하는지 확인 가능.
- user / views.py에 로그인을 처리해줄 함수(sign_in_view) 생성 후, url과 이어주기.
- 이미 url은 이어졌기 때문에 views.py의 함수만 수정함.
# user/views.py
from django.http import HttpResponse
def sign_in_view(request):
if request.method == 'POST':
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
02. signin.html의 form 태그 속성 넣기
- html에서 url, view로 데이터 넘겨줘야 하므로, form 태그의 action, method 이용.
- input의 name을 기억하도록. 이대로 /sign-in url로 보내주기 때문.
<!-- 윗부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 로그인</h2>
<form class="form-area" action="/sign-in/" method="post">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
03. view의 로그인 작업 마무리하기
- username, password가 /sign-in으로 전달. sign_in_view 함수가 실행됨.
- user / sign_in_view 함수에 로그인 기능 추가하기. 세션 기능 사용할 것임.
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
- 조건문 통해서 요청 메소드가 POST인지 검사함.
- username, password 받아서 패스워드 검사하기 위해서는 '사용자' 불러와야 함.
- UserModel 사용해서 사용자 불러오는 작업해보기
- 아래의 코드를 추가해준다. 그럼 끝!
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse("로그인 성공!")
else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')
2-9. 2주차 Wrap Up!! & 숙제 설명
더보기
01. 오늘의 복습
- 장고의 여러 명령어를 배움. (startapp, makemigrations, migrate)
- 장고 Admin 화면을 띄움.
- ORM에 대해 배웠고, Admin에 나의 데이터베이스 모델을 추가했음.
- POST, GET을 분리해서 하나의 view에 넣었음.
02. 숙제
- user / views.py를 수정하는 숙제임. 숙제 완료한 후 views.py 제출하기
- 숙제1: 회원가입 시 이미 있는 사용자인지 확인하는 코드 작성하기.
- 숙제2: 사용자가 로그인 성공 후, HttpResponse를 사용해서 화면에 '사용자 이름' 출력.
'스파르타코딩클럽 > 강의 정리' 카테고리의 다른 글
[스파르타] Django 심화반 2주차 (완강) (0) | 2022.03.08 |
---|---|
[스파르타] Django 심화반 1주차 (완강) (0) | 2022.03.08 |
[스파르타] Django 기초반 1주차 (완강) (0) | 2022.01.19 |
[스파르타] 실전 머신러닝 적용 4주차 (2) | 2022.01.11 |
[스파르타] 실전 머신러닝 적용 3주차 (완강) (0) | 2022.01.11 |
Comments