게스트 관리 및 출석 체크 기능(12)

39147 단어

1. 게스트 관리 목록 페이지, 새로 만들기.../templates/guest_manage.html 페이지.

<html lang="zh-CN">
<head>
    {% load bootstrap3 %}
    {% bootstrap_css %}
    {% bootstrap_javascript %}
    <title>Guest Managetitle>
    }
head>
<body>
    

    <nav class="navbar navbar-inverse navbar-fixed-top">

      <div class="container">

        <div class="navbar-header">

          <a class="navbar-brand" href="/guest_manage/">Guest Manage Systema>

        div>

        <div id="navbar" class="collapse navbar-collapse">

          <ul class="nav navbar-nav">

            <li><a href="/event_manage/"> a>li>

            <li class="active"><a href="#about"> a>li>

          ul>

          <ul class="nav navbar-nav navbar-right">

           <li><a href="#">{{user}}a>li>

           <li><a href="/logout/"> a>li>

         ul>

        div>

      div>

    nav>
     

    <div class="row" style="padding-top: 80px;">

        <div class="col-md-6">

          <table class="table table-striped">

            <thead><tr>

                <th>idth>

                <th> th>

                <th> th>

                <th>Emailth>

                <th> th>

                <th> idth>

              tr>

            thead>

            <tbody>

              {% for guest in guests %}

                <tr>

                  <td>{{ guest.id }}td>

                  <td>{{ guest.realname }}td>

                  <td>{{ guest.phone }}td>

                  <td>{{ guest.email }}td>

                  <td>{{ guest.sign }}td>

                  <td>{{ guest.event }}td>

                tr>

             {% endfor %}

            tbody>

          table>

        div>

      div>
body>
html>

2.../FirstProject/urls.py 파일에 게스트 경로를 추가하는 경로입니다.

from django.conf.urls import url
from django.contrib import admin
from FirstApp import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^admin/', admin.site.urls),
    url(r'^index/$', views.index),
    url(r'^login_action/$', views.login_action),
    url(r'^event_manage/$', views.event_manage),
    url(r'^accounts/login/$', views.index),
    url(r'^search_name/$', views.search_name),
    url(r'^guest_manage/$', views.guest_manage),
]

3. 열기... /FirstApp/views.py 파일,guest_ 만들기manage () 보기 함수입니다.

#  
@login_required
def guest_manage(request):
    username = request.session.get('user', '')
    guest_list = Guest.objects.all()
    return render(request, "guest_manage.html", {"user":username, "guests":guest_list})

모델의guest 클래스를 가져옵니다.guest를 통해.objects.all () 모든 게스트 대상 (데이터) 을 조회하고render () 방법을 통해guest_manage.html 페이지를 클라이언트에게 되돌려줍니다.여기, 게스트 목록 페이지가 완성되었습니다.

4. 페이지 나누기


Django는 페이지 나누기 기능을 위한 Paginator 클래스를 제공합니다.열기.../FirstApp/views.py 파일, guest_ 수정manage () 보기 함수입니다.
@login_required

def guest_manage(request):

    guest_list = Guest.objects.all()

    username = request.session.get('username', '')

    paginator = Paginator(guest_list, 2)

    page = request.GET.get('page')

    try:

        contacts = paginator.page(page)

    except PageNotAnInteger:

        #  ,  .

        contacts = paginator.page(1)

    except EmptyPage:

        #  , 

        contacts = paginator.page(paginator.num_pages)

    return render(request, "guest_manage.html", {"user": username, "guests": contacts})

paginator = Paginator(guest_list, 2)
검색된 모든 게스트 리스트guest_list를 Paginator 클래스에 놓고 페이지당 2개의 데이터를 표시합니다.
page = request.GET.get(‘page’)
GET 요청을 통해 현재 표시할 페이지의 데이터를 얻을 수 있습니다.페이지 페이지의 데이터를 가져옵니다. 페이지 페이지가 없으면 페이지 Notan Integer 이상을 던져 첫 페이지의 데이터를 되돌려줍니다.페이지 수를 초과하면 Empty Page 이상을 던져 마지막 페이지의 데이터를 되돌려줍니다.

5. 얻은 페이지의 데이터를 게스트 관리 페이지로 되돌려줍니다.templates/guest_manage.html 파일에 페이지 나누기 코드를 추가합니다.게스트 리스트에 추가합니다.



    <div class="pagination">

      <span class="step-links">

        {% if guests.has_previous %}

          <a href="?phone={{ phone }}&page={{ guests.previous_page_number }}">previousa>

        {% endif %}

          <span class="current">

            Page {{ guests.number }} of {{ guests.paginator.num_pages }}.

          span>

        {% if guests.has_next %}

          {% if phone %}

            <a href="?phone={{ phone }}&page={{ guests.next_page_number }}">nexta>

          {% else %}

           <a href="?page={{ guests.next_page_number }}">nexta>

          {% endif %}

        {% endif %}

      span>

    div>

6. 출석 체크 기능, 출석 링크 추가.../templates/event_manage.html 페이지, 출석 링크 1열 추가.

 

      <div class="page-header">

        <div id="navbar" class="navbar-collapse collapse">

          <form class="navbar-form" method="get" action="/search_name/">

            <div class="form-group">

              <input name="name" type="text" placeholder=" " class="form-control">

            div>

            <button type="submit" class="btn btn-success"> button>

          form>

        div>

      div>



      <div class="row">

        <div class="col-md-6">

          <table class="table table-striped">

            <thead>

              <tr>

                <th>idth>

                <th> th>

                <th> th>

                <th> th>

                <th> th>

                <th style="width: 45px;"> th>

                <th> th>

              tr>

            thead>

            <tbody>

              {% for event in events %}

                <tr>

                  <td>{{ event.id }}td>

                  <td>{{ event.name }}td>

                  <td>{{ event.status }}td>

                  <td>{{ event.address }}td>

                  <td>{{ event.start_time }}td>

                  <td><a href="/sign_index/{{ event.id }}/"  target="{{ event.id }}_blank">signa>td>

                  <td><a href="/sign_index2/{{ event.id }}/"  target="{{ event.id }}_blank">sign_weba>td>

                tr>

             {% endfor %}

            tbody>

          table>

        div>

      div>

7..../FirstProject/urls.py 파일에 서명 페이지 경로의 경로를 추가합니다.

from django.conf.urls import url
from django.contrib import admin
from FirstApp import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^admin/', admin.site.urls),
    url(r'^index/$', views.index),
    url(r'^login_action/$', views.login_action),
    url(r'^event_manage/$', views.event_manage),
    url(r'^accounts/login/$', views.index),
    url(r'^search_name/$', views.search_name),
    url(r'^guest_manage/$', views.guest_manage),
    url(r'^sign_index/(?P[0-9]+)/$', views.sign_index),
]

8. 출석 체크 페이지를 만들고... /FirstApp/views.py 파일, sign_ 만들기index () 뷰 함수입니다.

#  

@login_required

def sign_index(request, event_id):

    event = get_object_or_404(Event, id=event_id)

 return render(request, 'sign_index.html', {'even':event})

9. 출석 체크 페이지를 만들고... /templates/sign_index.html.

<html>
<head>
    <title>Sign Managetitle>
head>
<body>
     
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">{{ event.name }}a>
        div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li><a href="/event_manage/"> a>li>
            <li><a href="/guest_manage/"> a>li>
          ul>
        div>
      div>
    nav>
    
    <div class="container theme-showcase" role="main">
        <div id="navbar" class="navbar-collapse collapse">
            <form class="navbar-form" method="post" action="/sign_index_action/{{event.id}}/">
                <div class="form-group">
                    <input name="phone" type="text" placeholder=" " class="form-control">input>
                div>
                <button type="submit" class="btn btn-success"> button>
                <font color="red">
                    <br>{{hint}}
                    <br>{{guest.realname}}
                    <br>{{guest.phone}}
                font>
            form>
        div>
    div> 
body>
html>
<form class="navbar-form" method="post" action="/sign_index_action/{{event.id}}/">

서명 양식은 POST 요청을 통해 서명 휴대폰 번호를/sign_에 제출합니다.index_action/{{event.id}}/경로, {{event.id}}를 구체적인 발표회 id로 바꿉니다.
<font color="red">
                    <br>{{hint}}
                    <br>{{guest.realname}}
                    <br>{{guest.phone}}
                font>

{{hint}} 출석 성공과 실패에 대한 알림 정보를 표시합니다.
서명에 성공하면 {{guest.realname}}와 {{guest.phone}}에 게스트의 이름과 핸드폰 번호가 표시됩니다.

10. 출석 체크 동작, 열기.../FirstProject/urls.py 파일, 서명 동작 경로의 경로를 추가합니다.

from FirstApp import views

urlpatterns = [
    .......
    url(r'^sign_index_action/(?P[0-9]+)/$', views.sign_index_action),
]

11. 열기... /FirstApp/views.py 파일, sign_ 만들기index_action () 뷰 함수입니다.

#  
@login_required
def sign_index_action(request,eid):
    event = get_object_or_404(Event, id=eid)
    phone = request.POST.get(Event, id=eid)
    print(phone)
    result = Guest.objects.filter(phone=phone)
    if not result:
        return render(request, 'sign_index.html', {'event':event, 'hint':'phone error.'})

    result = Guest.objects.filter(phone=phone, event_id = eid)
    if not result:
        return render(request, 'sign_index.html', {'event':event, 'hint':'event id or phone error.'})

    result = Guest.objects.filter(phone=phone, event_id = eid)
    if result.sign:
        return render(request, 'sign_index.html', {'event':event, 'hint':'user has sign in.'})
    else:
        Guest.objects.filter(phone=phone, event_id = eid).update(sign='1')
        return render(request, 'sign_index.html', {'event':event, 'hint':'sign in success!', 'guest':result})

12. 시스템을 종료하고.../urls.py 파일, 종료 경로의 경로를 추가합니다.

from FirstApp import views

urlpatterns = [
    ......
    url(r'^logout/$', views.logout),
]

13. 열기... /FirstApp/views.py 파일,logout () 보기 함수를 만듭니다.

#  
@login_required
def logout(request):
    auth.logout(request) #  
    response = HttpResponseRedirect('/index/')
    return response

Django는 auth를 제공할 뿐만 아니라login () 방법은 로그인 사용자 정보를 검증하는 데 사용되며 auth도 제공합니다.logout () 방법은 시스템의 종료에 사용됩니다. 브라우저에 저장된 사용자 정보를 삭제할 수 있기 때문에 브라우저 쿠키를 삭제하는 방법을 고려할 필요가 없습니다.

좋은 웹페이지 즐겨찾기