Skip to content

Commit b343d4b

Browse files
committed
registration and login
1 parent 088aea1 commit b343d4b

29 files changed

+413
-27
lines changed

article/admin.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,24 @@
22
from __future__ import unicode_literals
33

44
from django.contrib import admin
5+
from django.utils.text import slugify
6+
from django.utils.safestring import mark_safe
57
from article.models import Category, Post
68

9+
10+
class PostAdmin(admin.ModelAdmin):
11+
model = Post
12+
list_display = ('title', 'category', 'created_on', 'last_modified', 'user',
13+
'tagimage')
14+
list_filter = ('user', 'category')
15+
search_fields = ('title', )
16+
17+
# def save_model(self, request, obj, form, change):
18+
# if not change:
19+
# obj.user = request.user
20+
# obj.slug = slugify(obj.title)
21+
# super(PostAdmin, self).save_model(request, obj, form, change)
22+
723
# Register your models here.
824
admin.site.register(Category)
9-
admin.site.register(Post)
25+
admin.site.register(Post, PostAdmin)

article/forms.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from django import forms
2+
from django.contrib.auth.models import User
3+
from django.contrib.auth.forms import UserCreationForm
4+
5+
6+
class RegistrationForm(forms.Form):
7+
8+
username = forms.CharField(
9+
label='Your Username', widget=forms.TextInput(
10+
attrs={'class': 'form-control'}
11+
)
12+
)
13+
email = forms.EmailField(
14+
label='Your Email', widget=forms.EmailInput(
15+
attrs={'class': 'form-control'}
16+
)
17+
)
18+
19+
20+
class RegistrationModelForm(forms.ModelForm):
21+
22+
class Meta:
23+
model = User
24+
fields = ['username', 'email', 'password']
25+
26+
27+
class RegistrationUserForm(UserCreationForm):
28+
username = forms.CharField(
29+
label='Your Username', widget=forms.TextInput(
30+
attrs={'class': 'form-control'}
31+
)
32+
)
33+
email = forms.EmailField(
34+
label='Your Email', widget=forms.EmailInput(
35+
attrs={'class': 'form-control'}
36+
)
37+
)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.3 on 2017-09-15 01:58
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
('article', '0009_auto_20170809_0429'),
15+
]
16+
17+
operations = [
18+
migrations.AlterModelOptions(
19+
name='category',
20+
options={'ordering': ['name'], 'verbose_name_plural': 'Category'},
21+
),
22+
migrations.AddField(
23+
model_name='post',
24+
name='user',
25+
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
26+
preserve_default=False,
27+
),
28+
]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.3 on 2017-12-04 03:02
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
('article', '0010_auto_20170915_0158'),
14+
]
15+
16+
operations = [
17+
migrations.AlterField(
18+
model_name='post',
19+
name='slug',
20+
field=models.SlugField(editable=False, max_length=255, null=True),
21+
),
22+
migrations.AlterField(
23+
model_name='post',
24+
name='user',
25+
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
26+
),
27+
]

article/models.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,55 @@
22
from __future__ import unicode_literals
33

44
from django.db import models
5+
from django.utils.safestring import mark_safe
6+
from django.utils.text import slugify
57
from tinymce.models import HTMLField
8+
from django.contrib.auth.models import User
69

710
# Create your models here.
11+
12+
813
class Category(models.Model):
914
name = models.CharField(max_length=255, blank=True, null=True)
1015
description = models.TextField(blank=True, null=True)
1116
created_on = models.DateTimeField(auto_now_add=True)
1217
last_modified = models.DateTimeField(auto_now=True)
13-
18+
1419
class Meta:
1520
verbose_name_plural = "Category"
1621
ordering = ['name']
17-
22+
1823
def __unicode__(self):
1924
return self.name
2025

26+
2127
class Post(models.Model):
2228
title = models.CharField(max_length=200, null=True)
23-
slug = models.SlugField(max_length=255, null=True)
24-
category = models.ForeignKey(Category,related_name='post_category', null=True)
29+
slug = models.SlugField(max_length=255, null=True, editable=False)
30+
category = models.ForeignKey(
31+
Category, related_name='post_category', null=True)
2532
image = models.ImageField(upload_to='post_image', blank=True, null=True)
2633
content = HTMLField(blank=True, null=True)
2734
created_on = models.DateTimeField(auto_now_add=True)
2835
last_modified = models.DateTimeField(auto_now=True)
29-
36+
user = models.ForeignKey(User, editable=False, null=True)
37+
3038
class Meta:
3139
verbose_name_plural = "Post"
32-
40+
3341
def __unicode__(self):
34-
return self.title
42+
return self.title
43+
44+
def save(self, *args, **kwargs):
45+
self.slug = slugify(self.title)
46+
super(Post, self).save(*args, **kwargs)
47+
48+
def tagimage(self):
49+
return mark_safe('<img width="50" src="/media/%s">' % self.image)
50+
51+
def bebas(self):
52+
return "Judulnya adalah : %s" % self.title
53+
54+
def lama_pinjam(self):
55+
return self.tgl_kembali - self.tgl_pinjam
56+

article/views.py

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import unicode_literals
33

4-
from django.shortcuts import render
5-
from django.http import HttpResponse
4+
from django.shortcuts import render, redirect
5+
from django.http import HttpResponse, HttpResponseRedirect
66
from django.template import RequestContext
7+
from django.contrib.auth import authenticate, login, logout
8+
from django.contrib.auth.decorators import login_required
79
from article.models import Category, Post
10+
from article.forms import RegistrationUserForm
811

912

1013
# Create your views here.
@@ -32,12 +35,55 @@ def home(request):
3235
'postingan': list_post,
3336
'nama': 'Ayip',
3437
}
35-
return render(request, 'index.html', anu)
36-
38+
return render(request, 'home.html', anu)
3739

40+
@login_required(login_url='/login/')
3841
def post_detail(request, slug):
3942
data = {
4043
'categories': Category.objects.all(),
4144
'post': Post.objects.get(slug=slug),
4245
}
4346
return render(request, 'detail.html', data)
47+
48+
49+
def loginview(request):
50+
if request.user.is_authenticated():
51+
return redirect('/')
52+
53+
data = {}
54+
if request.POST:
55+
username = request.POST.get('username')
56+
password = request.POST.get('password')
57+
auth_user = authenticate(username=username, password=password)
58+
if auth_user is not None:
59+
login(request, auth_user)
60+
return redirect('/')
61+
else:
62+
print "gagal silahkan cek user dan password anda"
63+
64+
return render(request, 'login.html', data)
65+
66+
67+
def logoutview(request):
68+
logout(request)
69+
return redirect('/')
70+
71+
72+
def registrationview(request):
73+
if request.method == 'POST':
74+
# create a form instance and populate it with data from the request:
75+
form = RegistrationUserForm(request.POST)
76+
# check whether it's valid:
77+
if form.is_valid():
78+
# process the data in form.cleaned_data as required
79+
# ...
80+
# redirect to a new URL:
81+
# form.save()
82+
print form.cleaned_data.get('username')
83+
return HttpResponseRedirect('/')
84+
85+
# if a GET (or any other method) we'll create a blank form
86+
else:
87+
form = RegistrationUserForm()
88+
data = {'form':form}
89+
return render(request, 'registration.html', data)

myblog/settings.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,16 @@
134134
MEDIA_URL = '/media/'
135135

136136
MEDIA_ROOT = 'media'
137+
138+
TINYMCE_DEFAULT_CONFIG = {
139+
'theme' : 'advanced',
140+
'theme_advanced_buttons1' : 'bold,italic,underline,separator,bullist,numlist,separator,link,unlink',
141+
'theme_advanced_buttons2' : '',
142+
'theme_advanced_buttons3' : '',
143+
'theme_advanced_toolbar_location' : 'top',
144+
'theme_advanced_toolbar_align': 'left',
145+
'paste_text_sticky': True,
146+
'paste_text_sticky_default' : True,
147+
'valid_styles' : 'font-weight,font-style,text-decoration',
148+
}
149+

myblog/urls.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@
1717
from django.contrib import admin
1818
from django.conf import settings
1919
from django.conf.urls.static import static
20-
from article.views import home
20+
from article.views import home, loginview, logoutview, registrationview
2121

2222
urlpatterns = [
2323
url(r'^$', home),
2424
url(r'^admin/', admin.site.urls),
2525
url(r'^tinymce/', include('tinymce.urls')),
2626
url(r'^article/', include('article.urls')),
27+
url(r'^login/$', loginview),
28+
url(r'^registration/$', registrationview),
29+
url(r'^logout/$', logoutview),
30+
url(r'^accounts/', include('registration.backends.simple.urls')),
2731
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
2832

templates/base.html

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@
3636
<div class="blog-masthead">
3737
<div class="container">
3838
<nav class="blog-nav">
39-
<a class="blog-nav-item active" href="#">Home</a>
39+
<a class="blog-nav-item active" href="/">Home</a>
4040
<a class="blog-nav-item" href="#">New features</a>
4141
<a class="blog-nav-item" href="#">Press</a>
4242
<a class="blog-nav-item" href="#">New hires</a>
4343
<a class="blog-nav-item" href="#">About</a>
4444
<a class="blog-nav-item" href="#">Category</a>
45+
{% if request.user.is_authenticated %}
46+
<a class="blog-nav-item" href="/logout">Logout</a>
47+
{% else %}
48+
<a class="blog-nav-item" href="/login">Login</a>
49+
{% endif %}
4550
</nav>
4651
</div>
4752
</div>
@@ -62,10 +67,12 @@ <h1 class="blog-title">My Blog</h1>
6267

6368
<div class="col-sm-3 col-sm-offset-1 blog-sidebar">
6469
{% block about %}
65-
<div class="sidebar-module sidebar-module-inset">
66-
<h4>About {{nama}}</h4>
67-
<p>Etiam porta <em>sem malesuada magna</em> mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.</p>
68-
</div>
70+
{% if request.user.is_authenticated %}
71+
<div class="sidebar-module sidebar-module-inset">
72+
<h4>About {{request.user}}</h4>
73+
<p>Etiam porta <em>sem malesuada magna</em> mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.</p>
74+
</div>
75+
{% endif %}
6976
{% endblock %}
7077
<div class="sidebar-module">
7178
<h4>Category</h4>
@@ -105,5 +112,9 @@ <h4>Elsewhere</h4>
105112
<script src="static/js/bootstrap.min.js"></script>
106113
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
107114
<script src="static/js/ie10-viewport-bug-workaround.js"></script>
115+
116+
{% block extraJS %}
117+
{% endblock %}
118+
108119
</body>
109120
</html>

templates/detail.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ <h2 class="blog-post-title">{{post.title|safe}}</h2>
66
<p class="blog-post-meta">{{post.created_on|date:"l, d F Y, H:i" }}. Category <a href="#">{{post.category}}</a></p>
77

88
{{post.content|safe}}
9-
<img src="{{post.image}}">
9+
<img src="/media/{{post.image}}">
1010
</div><!-- /.blog-post -->
1111
{% endblock %}
1212

templates/home.html

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,3 @@ <h2 class="blog-post-title"><a href="/article/{{post.slug}}">{{post.title|safe}}
1010
</div><!-- /.blog-post -->
1111
{% endfor %}
1212
{% endblock %}
13-
14-
15-
{% block about %}
16-
<div class="sidebar-module sidebar-module-inset">
17-
<h4>About</h4>
18-
<p>Ini about</p>
19-
</div>
20-
{% endblock %}

templates/login.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{% extends "base.html" %}
2+
3+
{% block content %}
4+
<form method="post" action="">
5+
{% csrf_token %}
6+
<div class="form-group">
7+
<label>Username</label>
8+
<input type="text" class="form-control" placeholder="Username" name="username">
9+
</div>
10+
<div class="form-group">
11+
<label>Password</label>
12+
<input type="password" class="form-control" placeholder="Password" name="password">
13+
</div>
14+
<button type="submit" class="btn btn-default">Login</button>
15+
</form>
16+
{% endblock %}
17+
18+
19+
{% block about %}
20+
<div class="sidebar-module sidebar-module-inset">
21+
<h4>About</h4>
22+
<p>Ini about</p>
23+
</div>
24+
{% endblock %}

0 commit comments

Comments
 (0)