게스트 관리 및 출석 체크 기능(12)
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 () 방법은 시스템의 종료에 사용됩니다. 브라우저에 저장된 사용자 정보를 삭제할 수 있기 때문에 브라우저 쿠키를 삭제하는 방법을 고려할 필요가 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.