Differences between revisions 15 and 16
Revision 15 as of 2006-09-22 18:15:38
Size: 3330
Editor: 211
Comment:
Revision 16 as of 2006-09-22 19:38:54
Size: 4343
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 59: Line 59:
 * 로그인, 사용자, 그룹관리
Line 108: Line 109:

Recursive relationship
{{{#!python
class Person:
    name = Model.CharField(maxlength=30)
    father = Model.ForeighKey('self')
    mother = Model.ForeighKey('self')
}}}

Custom SQL
{{{#!python
def my_custom_sql(self):
    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
    row = cursor.fetchone()
    return row
}}}

Integrating with a legacy database
{{{
django-admin.py inspectdb --settings=path.to.settings > models.py
}}}

로그인 (urls.py)
{{{#!python
urlpatterns = patterns('',
     (r'^login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
     (r'^logout/', 'django.contrib.auth.views.logout', {'next_page': '/asdf/'}),
)
}}}

Testing framework
 * application root에 tests.py unittest 파일 생성
 * 수행은 '''manage.py test'''
 * 매 테스트마다, 임시 데이터베이스 생성 후, 테스트 수행

TableOfContents

발표자료준비

[Django] 발표자료 준비 in Framework2.1(세미나 준비를 위한 임시공간)

  1. [http://bbs.python.or.kr/viewtopic.php?t=22325 파이썬마을]

  2. [http://forum.rubykr.org/ 루비사용자모임]

  3. [wiki:Blog/251 yong27 블로그]

프레젠테이션 파일 : attachment:Django.ppt (잦은 갱신 요망)

관련자료들

설명시 사용할 예제 모델

간단한 블로그

   1 from django.db import models
   2 
   3 class Post(models.Model):
   4     title = models.CharField(maxlength=200)
   5     content = models.TextField(maxlength=2000)
   6     ctime = models.DateTimeField(auto_now_add=True)
   7     mtime = models.DateTimeField(auto_now=True)
   8     is_public = models.BooleanField()
   9     tags = models.ManyToManyField('Tag')
  10 
  11 class Comment(models.Model):
  12     post = models.ForeignKey(Post)
  13     who = models.CharField(maxlength=30)
  14     content = models.TextField(maxlength=1000)
  15 
  16 class Tag(models.Model):
  17     name = models.CharField(maxlength=30)

관리자 인터페이스 간단 시연

위 모델을 admin 으로 데이터 입출력, 및 디스플레이 방법 시연

토론 준비

지난 모임에서 거론된 토론주제

  • ORM
  • 테이블 관계 설정
  • 데이타 검증
  • 관리자 인터페이스
  • 뷰, 템플릿
  • URL 구조

그밖에 황대산님과의 이야기를 통해

  • [AJAX] 구현예제
  • 일반적인 개발 프로세스
  • DB 특정 기능들 (self join, 정의되지 않은 객체이름 사용, custom SQL, legacy DB쓰기)
  • url 임의 매핑
  • 템플릿에 변수넘기기
  • 테스팅 프레임워크
  • 변경된 DB의 migration
  • 로그인, 사용자, 그룹관리

데이터 검증 관련 코드 : 데이터 입력부분 view는 다음처럼,

   1 def create_post(request):
   2     manipulator = Post.AddManipulator()
   3     if request.POST:
   4         new_data = request.POST.copy()
   5         errors = manipulator.get_validation_errors(new_data)
   6         if not errors:
   7             manipulator.do_html2python(new_data)
   8             new_post = manipulator.save(new_data)
   9             return HttpResponseRedirect("/blog/%i/" % new_post.id)
  10     else:
  11         errors = new_data = {}
  12 
  13     form = forms.FormWrapper(manipulator, new_data, errors)
  14     return render_to_response('blog/create_form.html', {'form': form})

[AJAX] 구현예제 : 따로 javascript 를 제공하지 않는다. 직접 구현하거나, prototype 등의 라이브러리 따로 추가하여 사용 가능

<script src="js/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function check() {
    new Ajax.Updater('result', '/rpc/', {
            method: 'get',
            parameters: 'id=' + id
    });
}
</script>

<form onsubmit="check(); return false;">
...
</form>
<div id="result">
</div>

일반적인 개발 프로세스

Recursive relationship

   1 class Person:
   2     name = Model.CharField(maxlength=30)
   3     father = Model.ForeighKey('self')
   4     mother = Model.ForeighKey('self')

Custom SQL

   1 def my_custom_sql(self):
   2     from django.db import connection
   3     cursor = connection.cursor()
   4     cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
   5     row = cursor.fetchone()
   6     return row

Integrating with a legacy database

django-admin.py inspectdb --settings=path.to.settings > models.py

로그인 (urls.py)

   1 urlpatterns = patterns('',
   2      (r'^login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
   3      (r'^logout/', 'django.contrib.auth.views.logout', {'next_page': '/asdf/'}),
   4 )

Testing framework

  • application root에 tests.py unittest 파일 생성
  • 수행은 manage.py test

  • 매 테스트마다, 임시 데이터베이스 생성 후, 테스트 수행

DjangoOnFramework2.1 (last edited 2013-06-17 15:13:10 by 61)

web biohackers.net