ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 미니방명록 예제
    Python Django 2022. 10. 23. 14:55

     

    메인 urls.py

    from django.contrib import admin
    from django.urls import path
    from myguest import views
    from django.urls.conf import include
    
    urlpatterns = [
        path("admin/", admin.site.urls),
         
        path('', views.MainFunc),
        path('guest/', include(''))
    ]

    include를 사용하여 guest/로 시작되는 것은 자식 urls.py를 생성하여 맡긴다.

     

    자식 urls.py

    from django.urls import path
    from myguest import views
    
    urlpatterns = [
        path('select', views.ListFunc),
        path('insert', views.InsertFunc), 
        path('insertok', views.InsertokFunc), 
    ]

     

    database models.py

    from django.db import models
    
    # Create your models here.
    class Guest(models.Model):
        # myno = models.AutoField(auto_created=True, primary_key=True)
        title = models.CharField(max_length=50)
        content = models.TextField()
        regdate = models.DateTimeField()
        
        class Meta:
            # ordering = ('title', )
            # ordering = ('title', 'id')
            ordering = ('-id',)

     

    admin.py

    from django.contrib import admin
    from myguest.models import Guest
    
    # Register your models here.
    class GuestAdmin(admin.ModelAdmin):
        list_display=('id', 'title', 'content','regdate')
    
    admin.site.register(Guest, GuestAdmin)

     

    views.py

    from django.shortcuts import render, redirect
    from myguest.models import Guest
    from datetime import datetime
    from django.utils import timezone
    from django.http.response import HttpResponseRedirect
    
    # Create your views here.
    def MainFunc(request):
        msg="<h1>홈페이지</h1>"
        return render(request, 'main.html', {'msg':msg})
    
    def ListFunc(request):
        # gdatas=Guest.objects.all() #전체 자료 읽어옴
        # print(gdatas)
        # #이런 식으로 데이터를 뿌려준다
        # print(Guest.objects.get(id=1))
        # print(Guest.objects.filter(id=1))
        # print(Guest.objects.filter(title='안녕'))
        # print(Guest.objects.filter(title__contains='안녕'))
        
        # 정렬
        # gdatas=Guest.objects.all().order_by('title') #오름차순
        # gdatas=Guest.objects.all().order_by('-title') #내림차순
        # gdatas=Guest.objects.all().order_by('-id')
        # gdatas=Guest.objects.all().order_by('title','-id') #타이틀 먼저, 그리고 아이디 정렬, 2개를 전달
        # gdatas=Guest.objects.all().order_by('-id')[0:2] #로우가 2개만 나옴, 0이상 2미만
        
        gdatas = Guest.objects.all()
        
        return render(request, 'list.html', {'gdatas':gdatas})
    
    
    def InsertFunc(request):
        return render(request, 'insert.html')
     
     
    def InsertokFunc(request):
        if request.method == 'POST':
            # print(request.POST.get('title')) 
            # print(request.POST['title']) # 먼저 잘 들어오는지 확인해야 된다.
            Guest(
                title = request.POST['title'],
                content = request.POST['content'],
                # regdate = datetime.now()
                regdate = timezone.now()
            ).save() # insert 하는 법
            
      
        # return HttpResponseRedirect('/guest/select') # 추가 후 목록보기
        return redirect('/guest/select') # 추가 후 목록보기

    database의 값을 가져와서 gdatas에 담아두고 그것을 list.html로 넘긴다.

    datetime이나 timezone을 import 받아서 현재 시간을 받아온다.

    redirect방식으로 ‘/guest/select’로 이동시킨다. 그 이유는 list.html을 다시 만나야 되기 때문이다.

     

     

    main.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <!--html parsing-->
    {{msg | safe}}
    메뉴1 메뉴2 <a href="guest/select">미니 방명록</a>
    </body>
    </html>

    만약 msg가 html 형식이라면 {{msg | safe}} 쓰는 것으로 html형식으로 적용되게 된다.

     

     

    list.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <p>** 글 내용 **</p>
    <table border="1">
    	<tr>
    		<th>아이디</th>
    		<th>제목</th>
    		<th>내용</th>
    		<th>등록일</th>
    	</tr>
    	{% if gdatas %}
    	{% for g in gdatas %}
    	<tr>
    		<td>{{g.id}}</td>
    		<td>{{g.title}}</td>
    		<td>{{g.content}}</td>
    		<td>{{g.regdate}}</td>
    	</tr>
    	{% endfor %}
    	{% else %}
    	<tr>
    		<td colspan="4">글이 없어요</td>
    	</tr>
    	{% endif %}
    </table>
    </body>
    </html>

     

     

     

     

    댓글

Designed by Tistory.