Showing
7 changed files
with
33 additions
and
46 deletions
| ... | @@ -23,6 +23,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | ... | @@ -23,6 +23,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 23 | SECRET_KEY = '534f6m=i@*)=q3kuwlge1m3c+@^cabr3ttcx*omv^+dorydjfr' | 23 | SECRET_KEY = '534f6m=i@*)=q3kuwlge1m3c+@^cabr3ttcx*omv^+dorydjfr' |
| 24 | 24 | ||
| 25 | # SECURITY WARNING: don't run with debug turned on in production! | 25 | # SECURITY WARNING: don't run with debug turned on in production! |
| 26 | +# TODO | ||
| 26 | DEBUG = True | 27 | DEBUG = True |
| 27 | 28 | ||
| 28 | ALLOWED_HOSTS = [] | 29 | ALLOWED_HOSTS = [] |
| ... | @@ -121,3 +122,8 @@ USE_TZ = True | ... | @@ -121,3 +122,8 @@ USE_TZ = True |
| 121 | # https://docs.djangoproject.com/en/2.0/howto/static-files/ | 122 | # https://docs.djangoproject.com/en/2.0/howto/static-files/ |
| 122 | 123 | ||
| 123 | STATIC_URL = '/static/' | 124 | STATIC_URL = '/static/' |
| 125 | + | ||
| 126 | + | ||
| 127 | +# Login redirect | ||
| 128 | + | ||
| 129 | +LOGIN_REDIRECT_URL = '/' | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | -"""dcloud URL Configuration | ||
| 2 | - | ||
| 3 | -The `urlpatterns` list routes URLs to views. For more information please see: | ||
| 4 | - https://docs.djangoproject.com/en/2.0/topics/http/urls/ | ||
| 5 | -Examples: | ||
| 6 | -Function views | ||
| 7 | - 1. Add an import: from my_app import views | ||
| 8 | - 2. Add a URL to urlpatterns: path('', views.home, name='home') | ||
| 9 | -Class-based views | ||
| 10 | - 1. Add an import: from other_app.views import Home | ||
| 11 | - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') | ||
| 12 | -Including another URLconf | ||
| 13 | - 1. Import the include() function: from django.urls import include, path | ||
| 14 | - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) | ||
| 15 | -""" | ||
| 16 | from django.contrib import admin | 1 | from django.contrib import admin |
| 17 | from django.conf.urls import url, include | 2 | from django.conf.urls import url, include |
| 3 | +from django.contrib.auth import views | ||
| 18 | 4 | ||
| 19 | 5 | ||
| 20 | urlpatterns = [ | 6 | urlpatterns = [ |
| 21 | url(r'^admin/', admin.site.urls), | 7 | url(r'^admin/', admin.site.urls), |
| 8 | + url(r'^accounts/login/$', views.login, name='login'), | ||
| 9 | + url(r'^accounts/logout/$', views.logout, name='logout', kwargs={'next_page': '/'}), | ||
| 22 | url(r'^restapi/', include('restful.urls')), | 10 | url(r'^restapi/', include('restful.urls')), |
| 23 | url(r'^', include('website.urls')), | 11 | url(r'^', include('website.urls')), |
| 24 | ] | 12 | ] |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | -from restful.models import File | ||
| 2 | -from restful.serializers import FileSerializer | ||
| 3 | from django.http import Http404 | 1 | from django.http import Http404 |
| 2 | +from django.contrib.auth.decorators import login_required | ||
| 4 | from rest_framework.views import APIView | 3 | from rest_framework.views import APIView |
| 5 | from rest_framework.response import Response | 4 | from rest_framework.response import Response |
| 6 | from rest_framework import status | 5 | from rest_framework import status |
| 7 | 6 | ||
| 7 | +from restful.models import File | ||
| 8 | +from restful.serializers import FileSerializer | ||
| 8 | 9 | ||
| 9 | -# Create your views here. | ||
| 10 | class FileList(APIView): | 10 | class FileList(APIView): |
| 11 | """ | 11 | """ |
| 12 | List all file, or create a new snippet. | 12 | List all file, or create a new snippet. | ... | ... |
| 1 | -{% extends "base_generic.html" %} | 1 | +{% extends "website/base.html" %} |
| 2 | 2 | ||
| 3 | {% block content %} | 3 | {% block content %} |
| 4 | - | 4 | + {% if form.errors %} |
| 5 | -{% if form.errors %} | 5 | + <p>이름과 비밀번호가 일치하지 않습니다. 다시 시도해주세요.</p> |
| 6 | -<p>Your username and password didn't match. Please try again.</p> | ||
| 7 | -{% endif %} | ||
| 8 | - | ||
| 9 | -{% if next %} | ||
| 10 | - {% if user.is_authenticated %} | ||
| 11 | - <p>Your account doesn't have access to this page. To proceed, | ||
| 12 | - please login with an account that has access.</p> | ||
| 13 | - {% else %} | ||
| 14 | - <p>Please login to see this page.</p> | ||
| 15 | {% endif %} | 6 | {% endif %} |
| 16 | -{% endif %} | ||
| 17 | - | ||
| 18 | -<form method="post" action="{% url 'login' %}"> | ||
| 19 | -{% csrf_token %} | ||
| 20 | 7 | ||
| 21 | -<div> | 8 | + <form method="post" action="{% url 'login' %}"> |
| 9 | + {% csrf_token %} | ||
| 10 | + <table> | ||
| 11 | + <tr> | ||
| 22 | <td>{{ form.username.label_tag }}</td> | 12 | <td>{{ form.username.label_tag }}</td> |
| 23 | <td>{{ form.username }}</td> | 13 | <td>{{ form.username }}</td> |
| 24 | -</div> | 14 | + </tr> |
| 25 | -<div> | 15 | + <tr> |
| 26 | <td>{{ form.password.label_tag }}</td> | 16 | <td>{{ form.password.label_tag }}</td> |
| 27 | <td>{{ form.password }}</td> | 17 | <td>{{ form.password }}</td> |
| 28 | -</div> | 18 | + </tr> |
| 19 | + </table> | ||
| 29 | 20 | ||
| 30 | -<div> | ||
| 31 | <input type="submit" value="login" /> | 21 | <input type="submit" value="login" /> |
| 32 | <input type="hidden" name="next" value="{{ next }}" /> | 22 | <input type="hidden" name="next" value="{{ next }}" /> |
| 33 | -</div> | 23 | + </form> |
| 34 | -</form> | ||
| 35 | - | ||
| 36 | -{# Assumes you setup the password_reset view in your URLconf #} | ||
| 37 | -<p><a href="{% url 'password_reset' %}">Lost password?</a></p> | ||
| 38 | - | ||
| 39 | {% endblock %} | 24 | {% endblock %} |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -12,6 +12,9 @@ | ... | @@ -12,6 +12,9 @@ |
| 12 | {% if user.is_authenticated %} | 12 | {% if user.is_authenticated %} |
| 13 | <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a> | 13 | <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a> |
| 14 | <a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a> | 14 | <a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a> |
| 15 | + <p class="top-menu">Hello {{ user.username }} <small>(<a href="{% url 'logout' %}">Log out</a>)</small></p> | ||
| 16 | + {% else %} | ||
| 17 | + <a href="{% url 'login' %}" class="top-menu"><span class="glyphicon glyphicon-lock"></span></a> | ||
| 15 | {% endif %} | 18 | {% endif %} |
| 16 | <h1><a href="/">Django Girls Blog</a></h1> | 19 | <h1><a href="/">Django Girls Blog</a></h1> |
| 17 | </div> | 20 | </div> | ... | ... |
| ... | @@ -2,6 +2,7 @@ from django.conf.urls import url | ... | @@ -2,6 +2,7 @@ from django.conf.urls import url |
| 2 | from website import views | 2 | from website import views |
| 3 | 3 | ||
| 4 | urlpatterns = [ | 4 | urlpatterns = [ |
| 5 | + # blog | ||
| 5 | url(r'^$', views.post_list, name='post_list'), | 6 | url(r'^$', views.post_list, name='post_list'), |
| 6 | url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'), | 7 | url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'), |
| 7 | url(r'^post/new/$', views.post_new, name='post_new'), | 8 | url(r'^post/new/$', views.post_new, name='post_new'), | ... | ... |
| 1 | from django.shortcuts import render, get_object_or_404, redirect | 1 | from django.shortcuts import render, get_object_or_404, redirect |
| 2 | from django.utils import timezone | 2 | from django.utils import timezone |
| 3 | +from django.contrib.auth.decorators import login_required | ||
| 3 | from website.models import Post | 4 | from website.models import Post |
| 4 | from restful.models import File | 5 | from restful.models import File |
| 5 | from website.forms import PostForm | 6 | from website.forms import PostForm |
| 6 | 7 | ||
| 7 | 8 | ||
| 8 | 9 | ||
| 9 | -# Create your views here. | ||
| 10 | def post_list(request): | 10 | def post_list(request): |
| 11 | posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') | 11 | posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') |
| 12 | return render(request, 'website/post_list.html', {'posts':posts}) | 12 | return render(request, 'website/post_list.html', {'posts':posts}) |
| ... | @@ -19,6 +19,7 @@ def post_detail(request, pk): | ... | @@ -19,6 +19,7 @@ def post_detail(request, pk): |
| 19 | post = get_object_or_404(Post, pk=pk) | 19 | post = get_object_or_404(Post, pk=pk) |
| 20 | return render(request, 'website/post_detail.html', {'post': post}) | 20 | return render(request, 'website/post_detail.html', {'post': post}) |
| 21 | 21 | ||
| 22 | +@login_required | ||
| 22 | def post_new(request): | 23 | def post_new(request): |
| 23 | if request.method == "POST": | 24 | if request.method == "POST": |
| 24 | form = PostForm(request.POST) | 25 | form = PostForm(request.POST) |
| ... | @@ -32,6 +33,7 @@ def post_new(request): | ... | @@ -32,6 +33,7 @@ def post_new(request): |
| 32 | form = PostForm() | 33 | form = PostForm() |
| 33 | return render(request, 'website/post_edit.html', {'form': form}) | 34 | return render(request, 'website/post_edit.html', {'form': form}) |
| 34 | 35 | ||
| 36 | +@login_required | ||
| 35 | def post_edit(request, pk): | 37 | def post_edit(request, pk): |
| 36 | post = get_object_or_404(Post, pk=pk) | 38 | post = get_object_or_404(Post, pk=pk) |
| 37 | if request.method == "POST": | 39 | if request.method == "POST": |
| ... | @@ -46,10 +48,12 @@ def post_edit(request, pk): | ... | @@ -46,10 +48,12 @@ def post_edit(request, pk): |
| 46 | form = PostForm(instance=post) | 48 | form = PostForm(instance=post) |
| 47 | return render(request, 'website/post_edit.html', {'form': form}) | 49 | return render(request, 'website/post_edit.html', {'form': form}) |
| 48 | 50 | ||
| 51 | +@login_required | ||
| 49 | def post_draft_list(request): | 52 | def post_draft_list(request): |
| 50 | posts = Post.objects.filter(published_date__isnull=True).order_by('created_date') | 53 | posts = Post.objects.filter(published_date__isnull=True).order_by('created_date') |
| 51 | return render(request, 'website/post_draft_list.html', {'posts': posts}) | 54 | return render(request, 'website/post_draft_list.html', {'posts': posts}) |
| 52 | 55 | ||
| 56 | +@login_required | ||
| 53 | def post_publish(request, pk): | 57 | def post_publish(request, pk): |
| 54 | post = get_object_or_404(Post, pk=pk) | 58 | post = get_object_or_404(Post, pk=pk) |
| 55 | post.publish() | 59 | post.publish() | ... | ... |
-
Please register or login to post a comment