E D R , A S I H C RSS

애플파이

Difference between r1.1 and the current

@@ -1,21 +1,192 @@
[[TableOfContents]]
=== 소개 ===
'''1학기'''
* 애플파이만큼 달콤한 파이썬 입문 스터디
* 참고 자료를 이용해 다같이 Python 3.6을 배워봅시다.
* 주 사용 자료는 위키독스 문서입니다.
* 매주 스터디에서 공부한 내용을 위키에 정리합니다.
* 화요일 오후 6시에 진행 예정.
* ~~[https://www.apple.com/kr/ 여기]와 전혀 관계 없습니다..~~
* 주 사용 자료는 점프 투 파이썬 (위키독스 문서) 입니다.
* 화요일 오후 6시에 진행.
 
'''2학기'''
* Django로 시작하는 웹 개발 입문 스터디
* 파이썬의 문법을 배웠으니 뭔가 만들어봅시다.
* 온라인 상의 튜토리얼 문서들을 참조합니다.

=== 참가자 ===
* [나종우]
* [주영석]

=== 활동 ===
===== 20180515 =====
* 점프 투 파이썬 기준 02-4까지 마침.
* 파이썬 언어 특징을 알아보고 설치.
* 입출력 방법, 변수와 자료형에 대해서 학습.
* if문, for문, while문 학습.
* 사용자 정의 함수 만드는 법을 알아봄.
* 형변환 방법을 알아봄.
* 문자열 자료형과 메소드들을 알아봄.
* 인덱싱과 슬라이싱에 대해 알아봄.
* 리스트, 튜플 개념을 학습.
* 리스트와 튜플의 메소드들을 알아봄.
* map 함수에 대해 알아봄.
* 백준에서 예제 문제 3개 풀이.
 
===== 20180522 =====
* 점프 투 파이썬 기준 04-3까지 마침.
* 연관 배열, 해시 테이블 개념 이해.
* dict와 set에 대해 알아봄.
* bool에 대해 알아봄.
* 다양한 종류의 연산자들을 알아봄.
* List Comprehension에 대해 알아봄.
* 함수에 대해 좀 더 깊은 학습.
* print, input에 대해 자세히 알아봄.
* 파일 입출력하는 법을 알아봄.
 
===== 20180529 =====
* 그동안 배운 것들 총 복습.
* 파이썬으로 백준의 다양한 문제를 품.
* 클래스에 대해 각자 집에서 자습.
 
===== 20180928 =====
* 인터넷과 서버에 대한 기초 개념
* 장고란 무엇인가, 프레임워크에 대한 이해
* 장고 설치 후 프로젝트 생성, It works 페이지 띄우기
* 장고 개발을 위해 필요한 콘솔 커맨드 위주로 공부
 
* 프로젝트 생성 : {{{django-admin.py startproject projectname .}}}
* settings.py 수정 {{{TIME_ZONE = 'Asia/Seoul'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
ALLOWED_HOSTS = ['*']}}}
* DB 업데이트 (마이그레이션 전체 적용) : {{{python manage.py migrate}}}
* 슈퍼유저 계정 생성 : {{{python manage.py createsuperuser}}}
* 서버 실행 : {{{python manage.py runserver 0.0.0.0:80}}}
* 명령어 도움말 : {{{python manage.py 명령어 --help}}}
 
===== 20181005 =====
* 장고의 MTV (Model-Template-View) 패턴 배우기
* 장고 Model을 만들고, 마이그레이션 적용하기
* 장고 View를 만들고, path() 메서드를 통해 URL 매칭
* render() 메서드를 통해 HTML(템플릿) 띄우기
* 쿼리셋을 활용해 객체 형태로 데이터베이스 다루기
* 템플릿 태그를 활용해 HTML에 동적 데이터 출력
 
* Model : 데이터 표현 / Template : 보여지는 형태 / View : HTTP 요청 받고 응답 반환 (모델과 템플릿을 연결)
* MVC 패턴과는 조금 다르다. (장고에서는 장고 프레임워크 자체를 컨트롤러라고 부른다.)
 
* 애플리케이션 생성 : {{{python manage.py startapp appname}}}
* settings.py에 애플리케이션 추가 : {{{INSTALLED_APPS = [(기존항목..), 'appname']}}}
* appname/models.py 코드 작성 (필드 속성은 [https://docs.djangoproject.com/en/2.1/ref/models/fields/ 여기] 참고) {{{from django.db import models
from django.utils import timezone
 
class modelname(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
 
def publish(self):
self.published_date = timezone.now()
self.save()
 
def __str__(self):
return self.title}}}
* 마이그레이션 파일 생성 : {{{python manage.py makemigrations appname}}}
* 마이그레이션을 실제 DB에 적용 : {{{python manage.py migrate appname}}}
* appname/admin.py에 모델 추가 : {{{admin.site.register(modelname)}}}
* urls.py에 패턴 추가 : {{{path('myapp/', include('appname.urls'))}}}
* appname/urls.py에 패턴 추가 : {{{path('', views.viewname, name='pathname')}}}
* appname/views.py 코드 작성 {{{from django.shortcuts import render
from django.utils import timezone
from .models import modelname
 
def viewname(request):
objs = modelname.objects.all()
return render(request, 'templatename.html', {'keyname': objs})}}}
* appname/templates/templatename.html 소스 작성 {{{<html>
<body>
{% for i in keyname %}
<div>
<h1><a href="">{{ i.title }}</a></h1>
<p>published: {{ i.published_date }}</p>
<p>{{ i.text|linebreaksbr }}</p>
</div>
{% endfor %}
</body>
</html>}}}
* {{{http://127.0.0.1:포트/admin/}}} 에서 모델링된 객체 관리
* {{{http://127.0.0.1:포트/myapp/}}} 에서 최종 형태 확인
 
===== 20181109 =====
* 오랜만에 모인 관계로 저번 내용 모두 복습
* HTML에 CSS 적용해보기 (부트스트랩) {{{
{% load static %}
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="{% static 'blog.css' %}">
}}}
* 템플릿 확장 {{{
1. {% block content %} - {% endblock %}
2. {% extends 'base.html' %} : 상속 받고 블럭에 내용 끼워넣기
}}}
* 템플릿 링크 {{{
1. <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
2. path('post/<int:pk>/', views.post_detail, name='post_detail')
}}}
* AWS ''''E''''C2 이용하여 웹 서버 만들기
* 도메인 주소 만들어 붙이기 ([https://freenom.com])
 
===== 20181130 =====
* Django 폼
* 글 작성 {{{def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
#post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'post_edit.html', {'form': form})}}}
{{{{% extends 'base.html' %}
 
{% block content %}
<h1>New Post</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %} }}}
* 글 수정 (html은 앞에서 사용한것 재활용){{{def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=True)
#post.published_date = timezone.now()
#post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'post_edit.html', {'form': form})}}}
* disqus로 댓글 달기 {{{ {% disqus_show_comments %} }}}
* css수정 {{{.pd {
margin-top: 25px;
float: right;
}
 
.dt {
display: inline-block;
margin-top: 15px;
margin-bottom: 25px;
} }}}
* 도메인 통합 [http://robinjoo.tk]

=== 참고 자료 ===
* [https://wikidocs.net/book/1]
* [https://docs.python.org/3/]
* [https://youtu.be/N4mEzFDjqtA 파이썬 40분 정리 (자막 키고 보면 좋아요)]
 
=== 방명록 ===
* [https://youtu.be/N4mEzFDjqtA]
* [https://tutorial.djangogirls.org/ko]
* [https://docs.djangoproject.com/ko/2.1/intro]




1. 소개

1학기
  • 애플파이만큼 달콤한 파이썬 입문 스터디
  • 참고 자료를 이용해 다같이 Python 3.6을 배워봅시다.
  • 주 사용 자료는 점프 투 파이썬 (위키독스 문서) 입니다.
  • 화요일 오후 6시에 진행.

2학기
  • Django로 시작하는 웹 개발 입문 스터디
  • 파이썬의 문법을 배웠으니 뭔가 만들어봅시다.
  • 온라인 상의 튜토리얼 문서들을 참조합니다.

3. 활동

3.1. 20180515
  • 점프 투 파이썬 기준 02-4까지 마침.
  • 파이썬 언어 특징을 알아보고 설치.
  • 입출력 방법, 변수와 자료형에 대해서 학습.
  • if문, for문, while문 학습.
  • 사용자 정의 함수 만드는 법을 알아봄.
  • 형변환 방법을 알아봄.
  • 문자열 자료형과 메소드들을 알아봄.
  • 인덱싱과 슬라이싱에 대해 알아봄.
  • 리스트, 튜플 개념을 학습.
  • 리스트와 튜플의 메소드들을 알아봄.
  • map 함수에 대해 알아봄.
  • 백준에서 예제 문제 3개 풀이.

3.2. 20180522
  • 점프 투 파이썬 기준 04-3까지 마침.
  • 연관 배열, 해시 테이블 개념 이해.
  • dict와 set에 대해 알아봄.
  • bool에 대해 알아봄.
  • 다양한 종류의 연산자들을 알아봄.
  • List Comprehension에 대해 알아봄.
  • 함수에 대해 좀 더 깊은 학습.
  • print, input에 대해 자세히 알아봄.
  • 파일 입출력하는 법을 알아봄.

3.3. 20180529
  • 그동안 배운 것들 총 복습.
  • 파이썬으로 백준의 다양한 문제를 품.
  • 클래스에 대해 각자 집에서 자습.

3.4. 20180928
  • 인터넷과 서버에 대한 기초 개념
  • 장고란 무엇인가, 프레임워크에 대한 이해
  • 장고 설치 후 프로젝트 생성, It works 페이지 띄우기
  • 장고 개발을 위해 필요한 콘솔 커맨드 위주로 공부

  • 프로젝트 생성 : django-admin.py startproject projectname .
  • settings.py 수정
    TIME_ZONE = 'Asia/Seoul'
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    ALLOWED_HOSTS = ['*']
  • DB 업데이트 (마이그레이션 전체 적용) : python manage.py migrate
  • 슈퍼유저 계정 생성 : python manage.py createsuperuser
  • 서버 실행 : python manage.py runserver 0.0.0.0:80
  • 명령어 도움말 : python manage.py 명령어 --help

3.5. 20181005
  • 장고의 MTV (Model-Template-View) 패턴 배우기
  • 장고 Model을 만들고, 마이그레이션 적용하기
  • 장고 View를 만들고, path() 메서드를 통해 URL 매칭
  • render() 메서드를 통해 HTML(템플릿) 띄우기
  • 쿼리셋을 활용해 객체 형태로 데이터베이스 다루기
  • 템플릿 태그를 활용해 HTML에 동적 데이터 출력

  • Model : 데이터 표현 / Template : 보여지는 형태 / View : HTTP 요청 받고 응답 반환 (모델과 템플릿을 연결)
  • MVC 패턴과는 조금 다르다. (장고에서는 장고 프레임워크 자체를 컨트롤러라고 부른다.)

  • 애플리케이션 생성 : python manage.py startapp appname
  • settings.py에 애플리케이션 추가 : INSTALLED_APPS = [(기존항목..), 'appname']
  • appname/models.py 코드 작성 (필드 속성은 여기 참고)
    from django.db import models
    from django.utils import timezone
    
    class modelname(models.Model):
        author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
        title = models.CharField(max_length=200)
        text = models.TextField()
        created_date = models.DateTimeField(default=timezone.now)
        published_date = models.DateTimeField(blank=True, null=True)
    
        def publish(self):
            self.published_date = timezone.now()
            self.save()
    
        def __str__(self):
            return self.title
  • 마이그레이션 파일 생성 : python manage.py makemigrations appname
  • 마이그레이션을 실제 DB에 적용 : python manage.py migrate appname
  • appname/admin.py에 모델 추가 : admin.site.register(modelname)
  • urls.py에 패턴 추가 : path('myapp/', include('appname.urls'))
  • appname/urls.py에 패턴 추가 : path('', views.viewname, name='pathname')
  • appname/views.py 코드 작성
    from django.shortcuts import render
    from django.utils import timezone
    from .models import modelname
    
    def viewname(request):
        objs = modelname.objects.all()
        return render(request, 'templatename.html', {'keyname': objs})
  • appname/templates/templatename.html 소스 작성
    <html>
    <body>
      {% for i in keyname %}
        <div>
          <h1><a href="">{{ i.title }}</a></h1>
          <p>published: {{ i.published_date }}</p>
          <p>{{ i.text|linebreaksbr }}</p>
        </div>
      {% endfor %}
    </body>
    </html>
  • http://127.0.0.1:포트/admin/ 에서 모델링된 객체 관리
  • http://127.0.0.1:포트/myapp/ 에서 최종 형태 확인

3.6. 20181109
  • 오랜만에 모인 관계로 저번 내용 모두 복습
  • HTML에 CSS 적용해보기 (부트스트랩)
    {% load static %}
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
    <link rel="stylesheet" href="{% static 'blog.css' %}">
    
  • 템플릿 확장
    1. {% block content %} - {% endblock %}
    2. {% extends 'base.html' %} : 상속 받고 블럭에 내용 끼워넣기
    
  • 템플릿 링크
    1. <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
    2. path('post/<int:pk>/', views.post_detail, name='post_detail')
    
  • AWS EC2 이용하여 웹 서버 만들기
  • 도메인 주소 만들어 붙이기 (https://freenom.com)

3.7. 20181130
  • Django 폼
  • 글 작성
    def post_new(request):
    	if request.method == "POST":
    		form = PostForm(request.POST)
    		if form.is_valid():
    			post = form.save(commit=False)
    			#post.author = request.user
    			post.published_date = timezone.now()
    			post.save()
    			return redirect('post_detail', pk=post.pk)
    	else:
    		form = PostForm()
    	return render(request, 'post_edit.html', {'form': form})
    {% extends 'base.html' %}
    
    {% block content %}
    	<h1>New Post</h1>
    	<form method="POST" class="post-form">{% csrf_token %}
    		{{ form.as_p }}
    		<button type="submit" class="save btn btn-default">Save</button>
    	</form>
    {% endblock %} 
  • 글 수정 (html은 앞에서 사용한것 재활용)
    def post_edit(request, pk):
    	post = get_object_or_404(Post, pk=pk)
    	if request.method == "POST":
    		form = PostForm(request.POST, instance=post)
    		if form.is_valid():
    			post = form.save(commit=True)
    			#post.published_date = timezone.now()
    			#post.save()
    			return redirect('post_detail', pk=post.pk)
    	else:
    		form = PostForm(instance=post)
    	return render(request, 'post_edit.html', {'form': form})
  • disqus로 댓글 달기 {% disqus_show_comments %}
  • css수정
    .pd {
        margin-top: 25px;
        float: right;
    }
    
    .dt {
        display: inline-block;
        margin-top: 15px;
        margin-bottom: 25px;
    } 
  • 도메인 통합 http://robinjoo.tk

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-16 14:07:55
Processing time 0.0520 sec