포스트맨 사용해서 API이용.
drf 2nd week 콜렉션 만들기 : create new collections
article list이름으로 데이터 전부 가져오기 :  get,  http://127.0.0.1:8000/articles/
n번 게시글 가져오기: get, http://127.0.0.1:8000/articles/n/
게시글 만들기 :  post, http://127.0.0.1:8000/articles/ raw json
환경 만들기 deploy, local : create new invirnoment
만든 환경 request에 적용하기 : {{variable}} 환경 로컬로 변경.
삭제 리퀘스트 만들기 n번 게시글 삭제하기: delete, http://127.0.0.1:8000/articles/n/
n번 게시글 업데이트 :  put, http://127.0.0.1:8000/articles/n/
API 문서화 하기
drf-yasg 설치 : pip install drf-yasg
freeze : pip freeze > requirements.txt
인스톨 앱에 추가 : 인스톨 앱에 복붙
urls 에 끼워 넣기 : urls에 복붙
swagger 접속하기 : http://127.0.0.1:8000/swagger/
swagger로 포스트 리퀘스트 가능하도록 클래스형 view 배우기.
apiview 임포트 : from rest_framework.views import APIview
ArticleList 클래스로 변경 : 복붙
urls에서 수정:  path('', views.ArticleList.as_view(), name  = 'ArticleList')
상세보기 수정 삭제
ArticleDetail 클래스 만들기 : class ArticleDetail(APIView)
구조에 맞게 변경 : 복붙
!urls 수정 : path('article/', views.ArticleDetail.as_view(), name = "ArticleDetial"
as_view에 꼭 () 를 붙이자. 이걸로 시간 30분 잡아먹었다.
!스웨거 오토 스키마 임포트 : from drf_yasg.utils import swagger_auto_schema
함수 수정 : @swagger_auto_schema(request_body=ArticleSerializer)
 
**스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의** 스웨거 오토 스키마는 데이터에 필요한 조건을 주는 역할.**
프론트엔드에 데이터 띄우기
프론트엔드 폴더 만들기 drf_week2_front: good
index. html 만들기 : good
index.js 만들기: good
js에 콘솔로그 만들고, index에 임포트 해주기: console.log('gogogo')
<script src="index.js"></script>
데이터 불러오기
로딩하면 불러오기 : window.onload =
데이터가 오기전까지 다른거 먼저 해라 : async function
아티클 불러오기 :  loadArticle()
데이터 보내고 받아온 데이터 변수에 저장하기 : const response = await fetch('http://127.0.0.1:8000/articles/', {method: 'GET'})
데이터가 제이슨이니까 제이슨으로 받아온거 변수에 저장:  response_json = await response.json()
콘솔에 찍어보기 : console.log(response_json)
**CORS 에러: 백엔드 서버와 프론트엔드 서버가 달라서 생기는 에러.
다른 서버에서 요청이나 응답이 가능하도록 변경!**
pip 인스톨: pip install django-cors-headers
freeze: pip freeze > requirements.txt
인스톨 앱에 추가 : "corsheaders",
미들웨어에 추가  순서중요!: "corsheaders.middleware.CorsMiddleware",
configuration(다른 컴퓨터에서 실행 되도록 도와주는 스크립트) :  CORS_ALLOW_ALL_ORIGINS =  True
데이터 띄워주기
id가 articles인 div만들기 : good
div를 변수에 저장하고:  const articles = document.getElementById("articles")
데이터를 하나씩 forEach로 돌린다.:
response_json.forEach(element => {
 
});
element에서 title을 꺼내  콘솔에서 본다. : console.log(element.title)
newArticle 변수에 새로운div 만들기 : const newArticle = document.createElement("div")
뉴아티클에 데이터 넣어주기:newArticle.innerText = element.title
articles에 뉴아티클 넣어주기: articles.appendChild(newArticle)
콘솔로그는 지우기 :  good
한번에 못한 것은 느낌표.
프로젝트 세팅
가상환경 만들기 : python -m venv venv
가상환경 실행 : venv/Sciprts/activate
장고 설치 : pip install django
DRF 설치 : pip install restframework
freeze : pip freeze > requirements.txt
freeze 설치 : pip install -r requirements.txt
장고 프로젝트 시작 drf_week2 : django-admin startproject drf_week2
깃 이그노어 : .gitignore window macos django python visual studio code
깃 인잇 :git init
깃 애드 :git add .
깃 뉴레포 :github new repo
깃 리모트 추가 drf_week2 : git remote add origin ...
깃 커밋 : git commit -m 'init project'
깃 푸시:git push origin 브랜치
인스톨 앱에 DRF 추가 : 'rest_framework'
언어,시간 변경 : ko-kr Asia/Seoul
서버 실행 : python manage.py runserver
 
시리얼라이저란?
앱 만들기 articles : python manage.py startapp articles
인스톨 앱에 앱 추가 : 'articles'
모델 만들기 Article title,content,created_at,updated_at :
#articles.models.py
 
class Article(models.Model):
title = models.CharFeild(max_length=100)
content = models.TextFeild()
created_at = DateTimeField(auto_now_add=True)
updated_at = DateTimeField(auto_now=True)
마이그레이션즈 : python manage.pt makemigrations
마이그레잇 : python manage.py migrate
admin Article 추가 :
#articles.admin.py
 
from articles.models import Article
 
admin.site.register(Article)
슈퍼유저 추가 : python manage.py createsuperuser
article 글 작성 : http://127.0.0.1:8000/admin/
테이블 확인 : db.sqlite3 articles_article
! 관리자 article 타이틀로 출력 :
def __str__(self):
return self.title
article url 연결
drf_week2 urls에 articles/ 추가:
from django.urls import path, include
 
path('artucles/', include('articles.urls')
articles urls에 index/ index함수 별칭 index:
from articles improt views
 
path('index/', views.index, name='index')
articles views수정, Response, api_view: 
from rest_framework.decorators import api_view
from rest_framework.response import Response
 
@api_view(['GET'])
def index(request):
return Response('안녕~')
데이터 보여주기
모든 객체 가져오기: articles = Articles.objects.all()
그 중에 0번 객체 가져오기: article = Articles[0]
데이터 담기 :
alticle_data = {
'title' : article.title,
'content' : article.content,
'created_at' : article.created_at,
'updated_at' : article.updated_at
}
데이터 보내주기 : return Respons(alticle_data)
시리얼라이즈로 데이터 보내주기
시리얼라이즈 만들기
시리얼라이즈.py 만들기: serializers.py
ArticleSerializer 클래스 만들기:
from rest_framework import serializer
from articles.models import Article
 
ArticleSerializer(serializer.ModelSerializer)
Meta 클래스 만들기:
class Meta:
model = Article
fields = '__all__'
 
!feilds라고 오타를 내고 오래동안 봤다.. 오타 조심하자.
viws 수정하기.
시리얼라이즈 할 모델의 객체 가져오기 :
from article.serializers import ArticleSerializer
 
serializer = ArticleSerializer(article)
시리얼라이즈 데이터 보내주기 : return Response(serializer.data)
여러개 시리얼라이즈 데이터 보내주기 :
serializer = ArticleSirializer(articles, many=True)
데이터 여러개 만들기 : admin/articles/article/
시리얼라이저로 게시글 작성
포스트 방식 추가 : [("POST")}
get일때 : if request.method == "GET":
post 일때: if request.method == "POST":
!포스트일 때 데이터 가져오기 : print(request.data[key]
디시리얼라이즈 : serializer = ArticleSirializer(data= request.data)
!디시리얼라이즈 유효성 검사 : if serializer.is_valid():
디시리얼라이즈 저장 : serializer.save()
시리얼라이즈 데이터 보여주기, 201 메세지 띄워주기 : return Response(serializers.data, status=status.HTTTP_201_CREATED
!유효성 검사 실패시 출력하고, 400 메세지 띄워주기 :else: serializer.errors, status=status.HTTP_400_BAD_REQUEST
content db, 유효성 공백도 가능하게 : null = True, blank = True
마이그레이션 :python manage.py makemigrations
마이그레잇 : python manage.py migrate
상세보기,수정,삭제
get방식 일 때: if request.method == 'GET':
url에서 article_id받아오고, article_view로, 별칭 article_view: path('<int:article_id>/', views.article_view, name='article_view'
views에서 함수 만들기: def article_view(request, article_id):
리퀘스트 메소드 세개 추가:@api_view(['GET', 'PUT', 'DELETE'])
아이디가 같은 객체 가져오기 : article = Article.object(id=article_id)
객체 시리얼라이즈 : serializer = ArticleSerializer(article)
데이터 보여주기 : return Response(serializer.data)
404 에러 보여주기 :
from rest_framework.generics import get_object_or_404
 
article = get_object_or_404(Article, id=article_id)
수정
put 방식 일 때: if request.method == 'PUT':
아이디가 같은 객체 가져오기:article = Articles.object(id=article_id)
시리얼라이즈와 디시리얼라이즈 같이 하기 : serializer = ArticleSirializer(article, request.data)
유효성 검사: serializer.is_valid()
저장 : serializer.save()
데이터 보여주기 : return Response(serializer.data)
수정해보기 : http://127.0.0.1:8000/articles/1/
삭제
DELETE 방식일 때: if request.method == 'DELETE':
아이디가 같은 객체 가져오기: article = get_object_or_404(Article, id=article_id)
삭제하기:article.delete()
status 보여주기 204: return Response(status=status.HTTP_204_NO_CONTENT)
url수정해서 홈 화면이 index가 되도록 수정, 함수도 articleAPI로 수정:
상세보기 함수 수정하기 articleDetailAPI로 :
 
 
 
 
 
프로토콜
서버와 클라이언트의 통신 방법을 프로토콜이라고 한다.
 
HTTP - HyperText Transfer Protocol
      html을 통신 하는 방법.
    현재는 모든 것을 통신 함.
HTML - Hypertext Markup Language
     
웹브라우저 흐름
  1. DNS 흐름
Domain Name System
도메인은 이름 느낌.
아이피 주소는 전화번호 느낌.
  1. HTTP 요청 메시지 작성
도메인을 주소창에 입력하면 서버에서 아이피 주소를 받아 오고 브라우저에 띄워주게 된다.
주소창에 도메인을 입력하는 것이 GET 방식으로 요청을 보내는 것.

 

**엄청 많은 용어와 개념이 있었지만 일단 지금은 패스! 코딩을 직접하는게 더 중요하다. 하나씩 찾아가며 다시 TIL 작성을 하자.**

2-01 URL과 뷰
  1. django-admin startapp pybo
앱은 작은 기능들. pybo는 게시판 기능.
hello pybo
  1. config.urls.py에 path('pybo/', views.index) 추가.
pybo/라고 쓴 것은 장고의 url 정규화 기능 때문. pybo를 주소로 입력해도 pybo/로 자동 변환.
URL 분리
  1. config.urls에 pybo.urls의 내용을 인식할 수 있도록 include를 사용한다.
  2. pybo.urls에서는 pybo.views와 매핑을 해준다.
 
2-02 모델
장고 앱 migrate
데이터베이스가 필요한 앱만 migrate가 필요. 그래서 pybo를 입력하지 않아도 실행이 가능.
  1. python manage.py migrate을 실행하면 테이블이 생성 된다.
DB Browser for SQLite
데이터베이스 파일을 열기 위한 프로그램.
모델 작성하기
  • 속성
CharField는 길이가 제한.
TextField는 제한이 없다.
ForeignKey는 다른 모델과 연결 하기 위해 사용.
on_delete=models.CASCADE는 열결된 데이터가 삭제되면 같이 삭제 된다는 의미.
여러 속성은 django에서 찾아보자.
  • 테이블 생성하기
pybo.apps.PyboConfig을 config.setting의 installed_apps에 추가해준다.
makemigrations는 모델에 변화가 있을 때만 실행하는 명령.
innital.py가 생성 되는 이유는 테이블 작업을 수행하기 위한 작업 파일이다.
그 다음에 migrate을 실행 한다.
sqlmigrate을 사용하면 migrate을 실행 시 어떤 쿼리문이 실행 되는지 알 수 있다.
  • migrate
Question.objects.all()은 QuerySet 객체가 리턴 된다.
id는 Primary Key라고 하며 데이터의 유일한 값.
Question 모델에 __str__ 메서드를 추가하면 id값 대신 subject 값을 볼 수 있다.
def __str__(self):
return self.subject
 
모델 사용하기
데이터를 모델에 맞게 만들고 수정하고 삭제하고 가져오는 방법에 대해 배운다.
지금은 패스.
 
2-03 장고 관리자
슈퍼유저
python manage.py createsuperuser
장고 관리자 화면
/admin
모델 관리
관리하고자 하는 모델의 앱에 있는 admin.py에 입력한다.
from .models import Qustion(=클래스의 이름)
admin.site.register(Question)
모델 검색
class QuestionAdmin(admin.ModelAdmin):
search_fields = ['subject']
admin.site.register(Question, QuestionAdmin)
이렇게 입력해주면 subject를 검색할 수 있는 필드가 생긴다.
 
2-04 조회와 템플릿
질문 목록
질문 데이터 가져오기
question_list = Question.objects.order_by('-create_date')
%로 둘러 쌓인 문장을 템플릿 태그라고 한다.
질문 상세
href="/pybo/{{ question.id }}/" 이게 템플릿의 링크. 이것과 urls를 매핑 해줘야한다.
path('<int:question_id>/', views.detail) 이것이 urls의 내용.
deatil함수를 작성한다.
함수에는 데이터와 html을 리턴하도록 한다.
url을 받고 그 url에서 id번호를 받고 그 id와 같은 question 객체를 리턴한다.
오류페이지
pybo/30을 들어가게 되면 30이 존재하지 않는다고 나온다. not found가 바람직하다.
from django.shortcuts import render, get_object_or_404
위처럼 임포트해주고
question = get_object_or_404(Question, pk=question_id)
id를 pk로 고쳐준다.
**제네릭뷰**
목록 조회나 상세 조회는 특정 패턴이 있어 간략화 한  것.
 
2-05 URL 별칭
URL 하드코딩
하드코딩은 상수나 변수에 들어가는 값을 소스코드에 직접 쓰는 방식.
url 리팩토링이 번번히 발생하기에 1:1 주소 매핑 되어 있는 별칭 사용.
URL 별칭
url에 name='index' 이런식으로 별칭을 붙일 수 있다.
링크에는 이름을 넣어주면 된다.
매개변수도 전달 할 수 있다.
템플릿에서 URL 별칭 사용
잘 이해가 안가는 부분이다... 후에 다시 찾아보자.
URL 네임스페이스
별칭들이 다른 앱과 겹칠 수 있으므로 앱에서 사용하는 별칭 앞에 이름을 붙이는 것이다.
urls.py에서 app_name = 'pybo' 이렇게 정의 할 수 있다. 이게 URL 네임스페이스
당연히 썼던 별칭들 앞에 'pybo:별칭' 을 붙여 줘야 한다.
 
2-06 데이터 저장
답변 등록 폼
form밑에는 항상 csrf_token으로 보안을 유지.
웹사이트에서 작성한 데이터 맞는지 판단하는 역할.
URL 매핑
from에서 answer_create 이라는 이름으로 링크.
urls에서는 answer/create/<int:question_id>로 이동하도록 함.
뷰 함수
POST로 답변을 저장하고 보여줄 페이지를 입력해준다.
답변 저장
답변을 저장해본다.
답변 조회
답변의 갯수를 보여주고
모든 답변을 보여준다.
 
2-07 스태틱
스태틱 디렉터리
템플릿과 마찬가지로 설정해주면 된다.
스타일시트
static폴더 안에 css파일을 만들어준다.
템플릿에 스타일 적용
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'style.css' %}">
 
2-08 부트스트랩
부트스트랩 설치
파일을 다운받고 스태틱 폴더에 넣어준다.
부트스트랩 적용
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'bootstrap.min.css' %}">
 
2-09 템플릿 상속
표준 HTML 구조
html,head,body 엘리먼트가 있어야한다.
템플릿 상속
표준에 맞게 html을 수정할 것인데 반복작업을 안하기 위해 상속이 존재한다.
base가 표준이 되고 다른 html에 block content부터 endblock 까지 상속을 받게 된다.
style.css
내용 삭제.

'점프 투 장고~' 카테고리의 다른 글

점프 투 장고 잘 모르는 것들  (0) 2023.04.14
1장 : 장고 개발 준비.  (0) 2023.04.11

4월 10일 : 공부법 특강을 했다. 이 날 정말 많은 도움이 되었다. 각 코드의 의미를 하나씩 주석을 다셨다는 강사님의 공부법은 정말 큰 도움이 되었다.

4월 11일 : 점프 투 장고를 읽기 시작했다. 하지만 그저 복붙하고 있는 자신을 발견했다. 머리에 들어간게 없었다. 

4월 12일 : 장고 5주차를 들었다. 로그인이나 회원가입, 글 쓰기 시 형식에 어긋나면 에러 내용을 띄워주는 방법을 배웠다. 데이터를 보내는 형식과 같았다.

4월 13일 : 장고 강의를 정리하기 위해 강의자료를 하나씩 읽으며 프로젝트를 스스로 만들어보기 시작했다. 막히는 부분은 따로 정리를 해서 til에 정리를 했다. 큰 도움이 되었다.

4월 14일 : 점프 투 장고도 정리를 하기 시작했다. 엄청 도움이 되었다. 이때 부터 공부 방법을 조금씩 터득하게 되었다. 계속 따라치면서 하나씩 의미를 적고 외우다시피 한번 더 에버노트에 안보고 적는 식으로 정리를 했다. 그리고 내가 지금 무엇을 공부하고 있는지 어떤 부분을 만들고 있는지 인지한 상태로 공부하는게 무척 중요했다.

 

월요일에 발표를 맡게 되었다. 삼촌네와 외출을 하였지만 프로젝트를 깔끔하게 만들기 위해 노트북을 가지고 나가긴 했지만 너무 실력이 부족하여 고칠 수 없었다. 그리고 엄청 불안해졌다. 나는 개발자가 되지 못할 것 같다는 마음과 뭘 해 먹고 살아야하지.. 막막한 마음이 들었다. 여자친구에게 말했는데 마음을 잡아주었다. '일단 삼촌네 가시면 청소하고 밥먹고 샤워하고 바로 앞에 있는 발표부터 준비를 해! 그리고 다음거 해! 그렇게 하루만 보고 앞으로 나아가!' 이렇게 말 해주었다.

감정을 완전히 뺄 수 없지만 되도록 덤덤하게 앞으로 나아가 보자.

취직하고 결혼해야지 밤톨아! 가자!

앱 등록 할 때
Config을 적을 때와 app이름을 적을 때가 있다.
Config은 클래스명을 등록.
app 이름은 클래스의 이름을 등록.
결국 둘 다 같은 클래스를 등록한다는 뜻이다.
 
makemigrations, migrate
grations는 테이블 작업을 위한 작업 파일 생성.
grate은 테이블을 생성한다.
 
모델로 인스턴스를 만들어보자.
셸을 키고, 모델과 필드에 필요한 기능을 임포트하고,  클래스의 속성들을 입력하고 인스턴트를 생성한다.
셸을 키고!
python manage.py shell
셸을 사용하기 위한 명령어.
모델과 필드에 필요한 기능을 임포트하고!
from pybo.models import Question, Answer
from django.utiils import timezone
클래스의 속성들을 입력한다.
q = Question(subject = '파이보가 뭐야?', content='파이보를 알고싶어', create_date=timezone.now())
인스턴스를 생성한다.
q.save()
각 속성의 값을 불러올 수 있다.
q.id, q.subject, q.content, q.create_date
 
 
def __str__(self)
return self.(속성)
q를 불러오면 Question의 객체라고 나온다.
하지만 str을 사용해주면 q의 속성으로 값을 가져올 수 있다.
 
모델에 메서드가 추가 될 때는 mi..할 필요없다.
모델의 속성이 바뀌었을 때 만 해주면 된다.
 
Question 객체를 하나 씩 보자.
모든 객체를 다 가져오고,  filter로, get으로, __로 특정 문자로 가져와 보자.
모든 객체를 다 가져오고!
Question.objects.all()
filter로 가져오고!
Question.objects.filter(id=1)
filter는 리스트로 가져온다.
get으로 가져오고!
Question.objects.get(id=1)
get은 객체를 가져온다.
특정 하나를 가져온다. 데이터가 없다면 오류 발생.
Question.objects.filter(subject__contains='pybo')
 
Question을 수정해보자.
수정할 객체를 불러오고, 수정을 하고, 저장을 한다.
수정할 객체를 불러온고!
q = Question.objects.get(id=1)
수정하고!
q.subjects = '장고는 무엇인가요?'
저장을 한다!
q.save()
 
Question 삭제해보자.
삭제할 객체를 불러오고, 객체를 삭제한다
객체를 불러온다.
q = Question.objects.get(id=1)
객체를 삭제한다.
q.delete()
 
!!에러!!
객체를 삭제해서 하나 더 만들려고 했는데 자꾸 에러가 난다.
Question이 정의 되어지지 않았다는 에러.
뭘까... 바로 __str__을 쓰고 셀을 다시 켯으니 import를 다시 해줘야 했던 것이었다...
해결!
 
Answer를 작성하자!
question을 변수에 담고. Answer를 생성하자.
q = question.objects.get(id=1)
Answer를 생성하자.
a = Answer(question=q, content='안녕~', create_date=timezone.now())
 
Answer를 조회하자!
Answer를 조회하고, 속성도 보고, 역참조도 해보자.
Answer를 조회하고!
Answer.objects.get(id=1)
속성을 보자!
a.question
역참조 해보자!
q.answer_set.all()
 
**역참조 정리**
질문과 답변은 1:N의 관계다.
즉 외래키를 가져오는 쪽에서 조회를 하는 것은 참조.
외래키를 주는 쪽에서 조회를 한다면 역참조다.
_set은 related_name 이름을 붙여주지 않는 이상 디폴드 값이다.
 
관리자 페이지에 모델 검색 만들기.
기능 속성을 받을 클래스를 만들고(상속이 중요), 속성을 추가하고, admin에 등록해준다.
클래스를 만든다.!
class QuestionAdmin(admin.ModelAdmin):
속성을 추가하고!
search_fields = ['subject']
admin에 등록해준다.
admin.site.register(Question, QuestionAdmin)
 
!!에러!!
데이터를 보내려고 했는데 에러가 나온다!
왜일까..
중괄호인데 대괄호를 사용했다!
딕셔너리 형태로 보낸다는 것을 기억하자!
 
**상세보기 매핑**
html= href='pybo/{{question.id}}'
urls = path('<int:question_id>/', views.detail)
이 둘의 관계가 뭘로 이어져 있다 의문이었다.
같은 이름으로 이어져 있는 것을 찾으려니 항상 이해가 안되었다.
question.id와 question_id는 이름이 다른데 어떻게 이어지지? 로 생각했다.
간단히 생각해보자.
html에서 가져온게 pybo/1이다. 하면
url에서는 1이라는 것을 question_id로 정의를 한 것이다.
view에서는 그것을 받아서 같은 id의 데이터를 보여주는 것이고.
 
오류페이지
get_object_or 404를 임포트 해주고, 객체를 가져온다.!
객체를 가져오든지, 아니면 404 라는 뜻이지!
임포트 해준다!
from django.shortcuts import render, ger_object_404
객체를 가져온다!
question = get_object_404(Question, pk=question_id)
 
템플릿에 URL 별칭 사용하기.(하드코딩 피하기 위함이다.)
템플릿에 각 url에 urls에 적었던 이름을 적어주고 인수 값은 그대로 적어준다.
전달 해줘야하는 파라미터의 이름을 적어서 보내주는게 이해하기가 편하다.
{%url 'detail' question_id = question.id%} 이런식으로! 이해가 잘 되네!!
 
네임스페이스를 추가해주면 별칭이 겹쳐도 겹치지 않는다..에?
urls에는 app_name = 'pybo'
html에서는 {%url 'pybo:detail' question_id=question.id%}
 
데이터 저장
답변등록 폼 작성으로 데이터를 보내고,
url에서 id를 받고 함수로 이어준다.
함수에서 데이터를 저장 해준다.
 

save(commit=False) 왜 사용하나요?

한줄요약 : commit=False를 하게 되면 데이터베이스에 당장 저장하지 않는다.
후에 작업을 더 하기 위해 사용한다.
 
페이지 요청 시 전달 되는 파라미터들을 쉽게 관리하기 위해 사용.
필수 파라미터 값 누락 확인, 형식 검증 등 목적으로 사용.
html을 자동으로 생성하거나, 폼에 연결된 모델을 이용해 데이터 저장하는 기능.
일반 폼과 모델 폼이 있다.
모델 폼은 모델과 연결된 폼. 열결된 모델의 데이터를 저장 할 수 있는 폼이다.
모델 폼은 Meta 클래스가 반드시 필요. Meta에는 사용할 모델과 속성을 적어야 한다.
 
폼 임포트를 하고, 모델을 임포트 하고, 클래스를 만들고, Meta를 만들고, 모델과 속성을 리스트로 적어준다.
from django import forms
from .models import Question
 
class QuestionForm(Forms.ModelForm):
class Meta:
model = Question
fields = ['subject', 'content']
 
폼을 이용해서 view함수 작성을 해보자.
사용할 폼을 임포트하고, 함수를 만들고, 폼을 사용하고,폼 데이터를 보낸다.
아마도 form.as_p가 그 데이터를 받는 듯 허다.
from .forms import Questionform
 
def question_create(request):
form = QuestionForm()
return render(request, 'pybo/question_list.html', {'form':form})
 
**action**
action에 url을 따로 적지 않으면 현재 url이 디폴트값으로 설정 된다.
작성도 하고 수정도 해야하는 현재 상태에서는 디폴트로 하면 된다.
 

'점프 투 장고~' 카테고리의 다른 글

2장 : 장고 기본 요소 익히기.  (0) 2023.04.17
1장 : 장고 개발 준비.  (0) 2023.04.11
파일 불러오기
from django.http import HttpResponse : 장고의 http에서 HttpResponse를 사용하겠다는 뜻.
path('', views.home) : 경로를 정해주는 코드. 전부 괄호에 넣어야 한다.
from django.shortcuts import render : 장고의 숏컷에서 랜더를 사용하겠다는 뜻.
return render(request, 'test.html') : 전해줄 html을 적는 코드. request를 빼먹지 말자.
 
모델 만들기
models.Model을 상속으로 주는 이유는 여러가지 필드라거나, ORM만들어주는 속성들이 있다.
 
관리자 만들기
from .models import UserModel : 모델을 사용하겠다는 뜻.
admin.site.register(UserModel) : 관리자 페이지에 등록하겠다는 뜻.
 
회원가입 기능 만들기
action의 url은 urls에서 정한 값이다.
html수정하고 views에서 데이터 받아온거 저장하면 됌.
 
로그인 기능 만들기
request.session 은 각 키마다 값을 가지고 있는 dictionary 와 비슷한 형태
request.session['user'] = me.username
user라는 키에 username이라는 값을 저장한다.
 
장고 유저모델 사용하기
from django.contrib.auth.models import AbstractUser
contrib은 장고의 패키지다.
장고의 contrib패키지에서 인증 모델 중에 AbstractUser를 사용하겠다는 뜻.
상속을 시켜주면 된다.
프로젝트에 알려줘야한다.
AUTH_USER_MODEL = 'user.UserModel'
이 뜻은 user앱에서 작성한 UserModel을 사용한다는 뜻이다.
 
장고 모델로 수정하기
get_user_model : 사용 할 수 있는 계정인지 판단하는 기능 불리안.
 
tweet 연결하기
request.user.is_authenticated : 유저가 인증을 받았는지.
 
url 정리하기.
로그인을 했다.
= 메인페이지 보여야함.
로그인 안했다.
= 회원가입, 로그인이 보여야함.
 
데이터 전송하기
all_tweet = ......
retrun.... {'tweet':all_tweet}
 
코멘트 작성하기.
관례에 따라, Django는 외래 키 필드명에 "_id" 이름을 자동으로 추가합니다.
즉 외래 키의 아이디를 지칭 하는 말이 라는 것. tweet_id
 
토핑 참조 확인하기
_set
"Answer" → 대문자를 소문자로 변경 + "_set" 을 붙인다가 규칙
QuerySet은 모델의 객체인데 이 set이 _set인 듯 하다.
 
exclude: 들어오지 못하게 하다.
 
역참조. 팔로우 하기, 취소하기.
상대를 팔로우 하는 모든 사람들 중에
내가 없다면 팔로우.
있다면 팔로우 취소.
 
 
 
 
 
 

'Django' 카테고리의 다른 글

장고 정리: 5주  (0) 2023.04.12
무신사 ERD  (0) 2023.04.09
파이썬 장고 실무 기초: 4  (0) 2023.04.05
파이썬 장고 실무 기초: 3  (0) 2023.04.05
파이썬 장고 실무 기초: 2  (0) 2023.04.04
회원가입, 로그인 시 에러 메세지 띄워주기
에러가 날 상황을 if문으로 정의를 해주고
error라는 이름으로 데이터를 보내주고
html에서 데이터를 받도록 수정한다.
 
글 작성 시 공백이면 에러 띄우기
post에서 실패 후 다시 render가 된다면 post요청이 되었던 것이기 때문에
get에서 띄워줬던 all_tweet은 긁어오지 못하게 된다.
post에 또 한번 적어주자.
content가 공백이라면 에러 띄워주고, 데이터도 띄워준다.
아니라면 데이터 저장~
html에서 에러를 띄워주도록 수정한다.
 
로그인이 된 상태에서만 친구 버튼 보이기!
유저가 로그인 이라면~ 을 html에 추가해주면 된다.
 
태그를 붙여보자!(적용)
태그 모듈 다운로드
pip install django-taggit
pip install django-taggit-templatetags2
장고에게 알려주기.
'taggit_templatetags2',
'taggit.apps.TaggitAppConfig',
태그 모듈에 필요한 정보라 추가.
TAGGIT_CASE_INSENSITIVE =True
TAGGIT_LIMIT = 50
게시글에 태그를 달 것이기 때문에 트위트 모델에 입력한다.
from taggit.managers import TaggableManager
tags = TaggableManager(blank=True)
db에 알려주기
python manage.py makemigrations
python manage.py migrate
 
이제 진짜로 태그를 사용해보자.
이것은.. 만든 것을 잘 복붙해서 사용을 하자.

'Django' 카테고리의 다른 글

스파르타 장고. 잘 못하는 것들.  (0) 2023.04.13
무신사 ERD  (0) 2023.04.09
파이썬 장고 실무 기초: 4  (0) 2023.04.05
파이썬 장고 실무 기초: 3  (0) 2023.04.05
파이썬 장고 실무 기초: 2  (0) 2023.04.04
1-03
가상 환경 준비
  1. 가상 환경 폴더 만들기.
  2. 가상 환경 폴더\Scripts 에서 activate 해주면 가상 환경 진입.
**cmd에서 폴더를 타고 들어가는 연습도 중요.
장고 설치
가상 환경에 장고를 설치 해야 한다.
  1. 가상 환경에 진입.
  2. pip install django==4.0.3
  3. pip의 업그레이드도 해준다.
mysite 가상 환경에는 장고 4.0.3과 최신 pip이 설치 되어있다.
1-04
프로젝트 생성
  1. 루트 디렉터리 생성
  2. 프로젝트 디렉터리 생성
  3. 가상 환경 진입 후 장고 프로젝트 생성. django-admin startproject config .
**config은 프로젝트의 이름이고, . 은 현재 경로에 생성하라는 의미.
개발 서버 구동
  1. python manage.py runserver
http://127.0.0.1:8000/ 과 http://localhost:8000/은 나의 PC를 가리키는 아이피 주소.
가상 환경 간단히 진입 하기
@echo off
cd c:/projects/mysite
c:/venvs/mysite/scripts/activate
  1. 텍스트 파일에 적는다. mysite.cmd로 확장자를 변경 해줘야 한다.
  2. cmd로 어디서든 불러올 수 있게 path를 지정해준다. sysdm.cpl 에서 환경 변수를 편집 할 수 있다.
  3. mysite를 어디서든 입력하면 내용이 실행된다.
1-05
파이참 설치
실행
인터프리터
설정에서 인터프리터 를 프로젝트의 가상 환경의 Scripts의 python.exe로 선택 해주면 된다.
setting.py
한국어로 바꾸고 : ko-kr
시간을 :Asia\Seoul

'점프 투 장고~' 카테고리의 다른 글

2장 : 장고 기본 요소 익히기.  (0) 2023.04.17
점프 투 장고 잘 모르는 것들  (0) 2023.04.14

학습법 특강 내용.

  • 코드 한 줄 한 줄 어떤 의미인지 주석을 단다.
  • 회사에서 필요로 하는 역량을 미리 파악하고 그것을 최종 프로젝트에 녹여 내는 게 중요.
  • 어떤 기능을 사용 할 줄 아느냐 보다 문제가 있었을 때 어떻게 해결 했는지가 중요하다.
  • 테스트 코드 관련하여 검색 해보고 공부하기. (나중에 커리큘럼 하면서 배우게 됌.)
  • 내가 쓰는 툴을 깊게 이해하면 깊은 인사이트를 얻을 수 있다. 파이썬, 네트워크, 데이터베이스 등등
  • 개념을 이해하기 보다는 체화 시켜서 도구를 사용 할 줄 아는게 더 급선무다. 하지만 개념도 무척 중요.
  • 강의 보고 배운 것을 따라하면 그것만 할 줄 알게 된다. 공식 문서를 보고 조합하면서 코드를 짜야 실력이 향상된다.
  • 코드 짜는 것에 익숙해지려면 알고리즘 푸는 방법이 제일 좋다.

주석을 하나 하나 달면서 어떤 의미있지 스스로 확인하는 방법이 무척 좋은 방법이라고 생각이 들었다.

그리고 알고리즘 정말 많이 풀고 싶은데 일단 지금 장고가 너무 급하다... 조만간 내가 찾아갈게.. 기다려 리즘아...

 

그리고 장고가 스스로 너무 부족하다고 판단하여 점프 투 장고를 보면서 정리를 하고 있다.

startapp, include, urls, views, migrate, makemigration, 모델, 하드코딩, 네임스페이스, form, static 등등

열심히 가보자.

+ Recent posts