[[TableOfContents]] === 소개 === '''1학기''' * 애플파이만큼 달콤한 파이썬 입문 스터디 * 참고 자료를 이용해 다같이 Python 3.6을 배워봅시다. * 주 사용 자료는 점프 투 파이썬 (위키독스 문서) 입니다. * 화요일 오후 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 소스 작성 {{{ {% for i in keyname %}

{{ i.title }}

published: {{ i.published_date }}

{{ i.text|linebreaksbr }}

{% endfor %} }}} * {{{http://127.0.0.1:포트/admin/}}} 에서 모델링된 객체 관리 * {{{http://127.0.0.1:포트/myapp/}}} 에서 최종 형태 확인 ===== 20181109 ===== * 오랜만에 모인 관계로 저번 내용 모두 복습 * HTML에 CSS 적용해보기 (부트스트랩) {{{ {% load static %} }}} * 템플릿 확장 {{{ 1. {% block content %} - {% endblock %} 2. {% extends 'base.html' %} : 상속 받고 블럭에 내용 끼워넣기 }}} * 템플릿 링크 {{{ 1. {{ post.title }} 2. path('post//', 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 %}

New Post

{% csrf_token %} {{ form.as_p }}
{% 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] * [https://tutorial.djangogirls.org/ko] * [https://docs.djangoproject.com/ko/2.1/intro]