목표
참고자료
내용
매일 아침 9기~10시 알고리즘 풀기로 하였다!
팀구성: https://www.notion.so/A-2-ca3709c2d1a44e3c9eb055514da97430
알고리즘: https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc&languages=python3
짝수의 합(공민영)
def solution(n):
#반복문을 사용하여 n이하의 짝수더하기
#짝수를 구하기 위한 조건문 사용
answer = 0
for num in range(2, n+1, 2):
answer += num
return answer
배열의 평균값 (공민영)
def solution(numbers):
#numbers는 매개변수 int가 들어있는 리스트
#반복문을 사용
#평균값을 구하기 위한 연산(리스트 길이로 나눔)
answer = 0
asum = 0
for a in numbers:
asum += a
answer = asum/len(numbers)
return answer
ORM의 활용과 Admin 익숙해지기
- tweet
- 데이터베이스에 적용할 클래스 작성
# tweet/models.py
from django.db import models
# user.models의 UserModel을 가져오겠다는 의미
from user.models import UserModel
# Create your models here.
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
# ForeignKey는 다른 데이터베이스에서 모델,내용을 가져오겠다는 의미
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
- 명령어 2개 작성
- python manage.py makemigrations
- python manage.py migrate
잘 들어갔을 때 터미널
- admin에 넣어주기
(내가 생성한 tweet모델이라는 친구를 admin에게 알려주겠다(admin에 등록해주겠다)
from django.contrib import admin
from .models import TweetModel
# Register your models here.
admin.site.register(TweetModel)
사용자 관리와 로그인 - 화면띄우기
- html 파일
- signin.html
base.html이라는 파일 위에 추가해주겠음
{% extends 'base.html' %}
- signin.html
- py 파일 추가
- MVP패턴 이론
- URL Conf: 우리가 접속할 url을 알려줌
-> View: 우리가 어떤 동작을 해줄 수 있는지 작성
-> 뷰에서 Template를 보여줄 수 있도록 만들것! - 회원가입 url과 관련된 기능(아래사진)
- url보고 어떤 url인지 판단 그리고 맞는 url로 이동
- urls.py에 우리가 추가한 앱을 알려줘야함
- user앱에 urls.py를 추가
- user앱의 url을 원래있던 djangoproject라는 url에 알려줘야함
- djangoproject/urls.py에 include 추가
- from django.urls import path, include
- urlpatterns = [ ]안에 path 추가-> user의 url과 djangoproject의 url이 연결되었음
- path('',include('user.urls')),
- user앱에 views.py 안 내용 입력
# render를 통해서 화면에 보이게 만들어줌
from django.shortcuts import render
# Create your views here.
# 함수를 만들고 html을 연결해줌
def sign_up_view(request):
return render(request, 'user/signup.html')
def sign_in_view(request):
return render(request, 'user/signin.html')
- user앱에 urls.py 안 내용 입력
from django.urls import path
from . import views
urlpatterns = [
#views 파일에 있는 sign_up_view가 실행
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
]
-> views파일에 있는 함수 실행 후 html 화면 보여줌
사용자 관리와 로그인 - 회원가입 기능 만들기
인터넷으로 통신하는 방법
get: 값을 읽어올 때
post: 데이터를 넣어주고 싶을 때
회원가입해서 작성한 데이터를 데이터베이스에 저장하는 기능개발
- 지금부터 모두 user앱에서 할 것임
- post방식에서 데이터를 전달하는 형식 할 것임
- view.py>sign_up_view()에 코드 추가 작성
화면에서 장고 서버로 url요청이 가면(sign_up_view()에 요청이 들어오는 url을 실행 할 때) url의 요청방식을 가장 먼저 확인하는데 이때 if문이 실행
=> 'GET'이면 화면을 보여주겠다는 의미
=> 'POST'면 다른 작업을 하겠다는 의미(데이터베이스를 저장하는 기능들을 추가하면 좋음)
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
- signup.html로 이동 form에 *method, *action 속성 추가
<form class="form-area" method="post" action="/sign-up">
- 보안하는 기능을 쓰겠다는 의미
(form 안에 작성)
{% csrf_token %}
- 작성내용을 서버에서 받아서 내용을 데이터베이스에 저장하기
- input 태그의 name주목
- button 확인 (form을 실행시켜주는 역할)
- views.py
- .은 내가 가지고 있는 위치라는 뜻
- .models 위치에서 UserModel을 가져오겠다는 뜻
def sign_up_view(request): if request.method == 'GET': return render(request, 'user/signup.html') elif request.method == 'POST': #POST로 온 데이터를 username = request.POST.get('username',None) username = request.POST.get('username',None) username = request.POST.get('username',None) username = request.POST.get('username',None) return ''
- signup.html에서 method를 post로 주었기 때문에 post 아래 내용 작성
- request.POST는 POST로 온 데이터를 받는다는 의미
- .get('username',None)는
- 많은 데이터중에 'username'이라는 이름으로 되어있는 데이터를 가지고 오는데
- username이 없으면 None으로 빈칸 처리하겠다는 의미
- 이렇게 가져온 정보를 username이라는 변수에 저장
- from .models import UserModel
- password가 같아야 회원가입이 되도록하기
- password와 password2가 같지 않으면 다시한번 화면을 보여주기
else: new_user = UserModel() # request.POST해온 username을 UserModel()의 username에 담는다 new_user.username = username new_user.password = password new_user.bio = bio
- 같으면 user를 저장
- new_user는 저장이 되어있지만 실제로 우리 데이터베이스에는 저장이 안되어있는 상태임
new_user.save()
- 실제로 데이터베이스에 저장하기 위해 코드작성
- if password != password2: return render(request, 'user/signup.html')
- 저장이 된 후에 회원가입페이지말고 로그인페이지를 보여주기
: redirect()함수 사용
사용하려면 from import 작성return redirect('/sign-in')
- 회원가입이 완료되었을때만 실행
- return에 redirect()함수를 사용하여 sign-in url을 작성
- from django.shortcuts import render,redirect
사용자 관리와 로그인 - 로그인 기능 만들기
세션(사용자 정보를 저장하는 공간)
: 누가 요청을 했는지 확인 해주는 기능
- 세션안에 사용자 정보를 집어 넣어 어떤 유저가 들어가있는지 확인하려고 함
- user앱의 url, view세팅
- views.py에 로그인을 처리해줄 함수 만들기(url은 회원가입만들면서 연결함)
# HttpResponse 화면에 글자를 띄울 때 사용
from django.http import HttpResponse
- 로그인 성공하면 로그인성공이라는 메시지 출력하기
(get/post가 이해안됨)
def sign_in_view(request):
if request.method == 'POST':
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
- signin.html로 이동 form에 속성추가
<form class="form-area" method="post" action="/sign-in/">
- 보안기능 추가
{% csrf_token %}
- signin.html안에 name을 잘 확인하기
- views.py로 이동 if문 추가
- if request.method == 'POST': username = request.POST.get('username',None) password = request.POST.get('password',None)
- 기존에 유저가 있으면 UserModel을 .objects로 불러오기
- UserModel은 이미 데이터베이스와 연결되어있는 객체(클래스)라고 생각하면 됨
- .get(username=username) 어떤 데이터를 가져올껀지 조건을 써줌
- (username(UserModel안에있던것)=username(post에서 받아온 값))
- 이러면 me는 회원가입한 사용자들만 불러올 수 있게됨
- me = UserModel.objects.get(username=username)
- password 확인
- 로그인을 요청한 사용자(있을경우)의 password랑 post에서 작성한 password와 같은지 확인
- if me.password == password:
- 다 맞으면 로그인
- if문 안쪽에 적어줌
- request.session['user'] = me.username(이거 이해못함)
- .session: 사용자 정보를 저장할 수 있는 공간
- .session['user']: session에다가 user를 넣음
- request.session['user'] = me.username return HttpResponse("로그인 성공!")
- 만약에 password가 다르면
- redirect() 기능 사용
- 로그인페이지로 redirect()시켜줌
- else: return redirect('/signin')
용어사전
- form: 화면에 있는 데이터를 서버로 전송할 때 많이 사용하는 태그
- method: get/post 둘 중 하나 사용할 수 있음
- action: 어떤 url로 전달 될 건지 적어줘야함(슬래시 꼭 적기)
- {% csrf_token %}: 보안을 지켜주기 위한 기능(장고에서 데이터를 post할 때는 보안 기능을 꼭 추가해야함)
- button: form 안에 있으면 해당 form을 실행시켜주는 역할을 함(어디로?action속성의 값으로/어떤방식으로?method속성의 값으로)
문제 (해결하기 어려웠던 일이나 에러)
시도 (문제가 생긴 이유와 해결하기 위해 시도해본 것들)
해결 (최종적으로 해결이 되었을 때 시도한 것 정리)
마무리 (내가 새롭게 알게 된 것이나 짧은 정리)
'TIL' 카테고리의 다른 글
[TIL]2023.04.10 / 장고 3주차(2) 장고 팀프로젝트 (0) | 2023.04.30 |
---|---|
[TIL]2023.04.07 / 알고리즘/장고기초3주차 / (0) | 2023.04.30 |
[TIL]2023.04.05 / 알고리즘/장고 기초 2주차 (0) | 2023.04.30 |
[TIL]2023.04.04 / 장고 기초 / (0) | 2023.04.30 |
[TIL]2023.04.03 / 장고 기초 시작 / VSC 장고 세팅 / 특강 (0) | 2023.04.29 |