修改用户及评论部分功能

master
车亮亮 9 years ago
parent f934115621
commit 447b353dd2

@ -24,8 +24,8 @@ SECRET_KEY = '&3g0bdza#c%dm1lf%5gi&0-*53p3t0m*hmcvo29cn^$ji7je(c'
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True DEBUG = True
#ALLOWED_HOSTS = [] # ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['blog.lylinux.org','127.0.0.1'] ALLOWED_HOSTS = ['blog.lylinux.org', '127.0.0.1']
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
@ -35,6 +35,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sites',
'pagedown', 'pagedown',
'blog', 'blog',
'accounts', 'accounts',
@ -45,9 +46,9 @@ INSTALLED_APPS = [
MIDDLEWARE_CLASSES = [ MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
#'django.middleware.cache.UpdateCacheMiddleware', # 'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
#'django.middleware.cache.FetchFromCacheMiddleware', # 'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
@ -135,6 +136,7 @@ STATIC_URL = '/static/'
STATICFILES = os.path.join(BASE_DIR, 'static') STATICFILES = os.path.join(BASE_DIR, 'static')
AUTH_USER_MODEL = 'accounts.BlogUser' AUTH_USER_MODEL = 'accounts.BlogUser'
LOGIN_URL = '/login/'
TIME_FORMAT = '%Y-%m-%d %H:%M:%S' TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
DATE_TIME_FORMAT = '%Y-%m-%d' DATE_TIME_FORMAT = '%Y-%m-%d'
@ -150,7 +152,7 @@ BOOTSTRAP_COLOR_TYPES = [
# 侧边栏文章数目 # 侧边栏文章数目
SIDEBAR_ARTICLE_COUNT = 10 SIDEBAR_ARTICLE_COUNT = 10
#侧边栏评论数目 # 侧边栏评论数目
SIDEBAR_COMMENT_COUNT = 5 SIDEBAR_COMMENT_COUNT = 5
# cache setting # cache setting

@ -19,5 +19,7 @@ from django.contrib import admin
urlpatterns = [ urlpatterns = [
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),
url(r'', include('blog.urls', namespace='blog', app_name='blog')), url(r'', include('blog.urls', namespace='blog', app_name='blog')),
url(r'', include('comments.urls', namespace='comment', app_name='comments'))
url(r'', include('comments.urls', namespace='comment', app_name='comments')),
url(r'', include('accounts.urls', namespace='account', app_name='accounts'))
] ]

@ -0,0 +1,39 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.org/
@software: PyCharm
@file: forms.py
@time: 2016/11/20 下午3:16
"""
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.forms import widgets
from django.conf import settings
from django.contrib.auth import get_user_model
class LoginForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['username'].widget = widgets.TextInput(attrs={'placeholder': "用户名", "class": "form-control"})
self.fields['password'].widget = widgets.PasswordInput(attrs={'placeholder': "密码", "class": "form-control"})
class RegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].widget = widgets.TextInput(attrs={'placeholder': "用户名", "class": "form-control"})
self.fields['email'].widget = widgets.EmailInput(attrs={'placeholder': "邮箱", "class": "form-control"})
self.fields['password1'].widget = widgets.PasswordInput(attrs={'placeholder': "密码", "class": "form-control"})
self.fields['password2'].widget = widgets.PasswordInput(attrs={'placeholder': "确认密码", "class": "form-control"})
class Meta:
model = get_user_model()
fields = ("username", "email")

@ -1,12 +1,26 @@
from django.db import models from django.db import models
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
# Create your models here. # Create your models here.
class BlogUserManager(BaseUserManager):
def create_user(self, email, username, password=None):
user = self.model(
username=username, email=email, nickname=username
)
user.set_password(password)
user.save(using=self._db)
return user
class BlogUser(AbstractUser): class BlogUser(AbstractUser):
nickname = models.CharField('昵称', max_length=50, blank=True) nickname = models.CharField('昵称', max_length=50, blank=True)
mugshot = models.ImageField('头像', upload_to='upload/mugshots', blank=True) mugshot = models.ImageField('头像', upload_to='upload/mugshots', blank=True)
objects = BlogUserManager()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('blog:author_detail', kwargs={'author_name': self.username}) return reverse('blog:author_detail', kwargs={'author_name': self.username})
def __str__(self):
return self.email

@ -0,0 +1,25 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.org/
@software: PyCharm
@file: urls.py
@time: 2016/11/20 下午3:52
"""
from django.conf.urls import url
from django.contrib.auth import views as auth_view
from . import views
from .forms import LoginForm
urlpatterns = [
url(r'^login/$', views.LoginView.as_view(success_url='/'), name='login', kwargs={'authentication_form': LoginForm}),
url(r'^register/$', views.RegisterView.as_view(success_url="/"), name='register'),
]

@ -1,3 +1,25 @@
from django.shortcuts import render from django.shortcuts import render
from django.contrib.auth.views import login
from .forms import RegisterForm,LoginForm
from django.views.generic.edit import FormView
from django.contrib.auth import get_user_model
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
# Create your views here. # Create your views here.
class RegisterView(FormView):
form_class = RegisterForm
template_name = 'account/registration_form.html'
def form_valid(self, form):
user = form.save(False)
user.save(True)
return HttpResponseRedirect('/')
class LoginView(FormView):
form_class =LoginForm
template_name = 'account/login.html'

File diff suppressed because one or more lines are too long

@ -0,0 +1,58 @@
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #fff;
}
.form-signin {
max-width: 330px;
padding: 15px;
margin: 0 auto;
}
.form-signin-heading {
margin: 0 0 15px;
font-size: 18px;
font-weight: 400;
color: #555;
}
.form-signin .checkbox {
margin-bottom: 10px;
font-weight: normal;
}
.form-signin .form-control {
position: relative;
height: auto;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: 10px;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
}
.card {
width: 304px;
padding: 20px 25px 30px;
margin: 0 auto 25px;
background-color: #f7f7f7;
border-radius: 2px;
-webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
}
.card-signin {
width: 354px;
padding: 40px;
}
.card-signin .profile-img {
display: block;
width: 96px;
height: 96px;
margin: 0 auto 10px;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -7,13 +7,11 @@ from django.views.generic import UpdateView
from django.views.generic.edit import CreateView, FormView from django.views.generic.edit import CreateView, FormView
from django.views.generic.dates import YearArchiveView, MonthArchiveView from django.views.generic.dates import YearArchiveView, MonthArchiveView
from blog.models import Article, Category, Tag from blog.models import Article, Category, Tag
from django.conf import settings
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from comments.forms import CommentForm from comments.forms import CommentForm
from comments.models import Comment
from django import forms
class ArticleListView(ListView): class ArticleListView(ListView):
# template_name属性用于指定使用哪个模板进行渲染 # template_name属性用于指定使用哪个模板进行渲染
@ -58,17 +56,21 @@ class ArticleDetailView(DetailView):
except ObjectDoesNotExist: except ObjectDoesNotExist:
return None return None
form = CommentForm() comment_form = CommentForm()
if self.request.user.is_authenticated(): if self.request.user.is_authenticated():
comment_form.fields.update({
'email': forms.CharField(widget=forms.HiddenInput()),
'name': forms.CharField(widget=forms.HiddenInput()),
})
user = self.request.user user = self.request.user
form.fields["email"].initial = user.email comment_form.fields["email"].initial = user.email
form.fields["name"].initial = user.username comment_form.fields["name"].initial = user.username
article_comments = self.object.comment_set.all() article_comments = self.object.comment_set.all()
kwargs['form'] = comment_form
# print(article_comments)
kwargs['form'] = form
kwargs['article_comments'] = article_comments kwargs['article_comments'] = article_comments
kwargs['comment_count'] = len(article_comments) if article_comments else 0; kwargs['comment_count'] = len(article_comments) if article_comments else 0;
next_article = get_article(articleid + 1) next_article = get_article(articleid + 1)

@ -16,6 +16,7 @@ from .models import Comment
from django import forms from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
""" """
class CommentForm(forms.Form): class CommentForm(forms.Form):
@ -24,21 +25,42 @@ class CommentForm(forms.Form):
name = forms.CharField(label='姓名') name = forms.CharField(label='姓名')
body = forms.CharField(widget=forms.Textarea, label='评论') body = forms.CharField(widget=forms.Textarea, label='评论')
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False) parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
class LoginCommentForm(ModelForm):
url = forms.URLField(label='网址', required=False)
email = forms.EmailField(label='电子邮箱', required=False, widget=forms.HiddenInput)
name = forms.CharField(label='姓名', widget=forms.HiddenInput)
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
def __init__(self):
pass
class Meta:
model = Comment
fields = ['body']
""" """
class CommentForm(ModelForm): class CommentForm(ModelForm):
url = forms.URLField(label='网址', required=False) url = forms.URLField(label='网址', required=False)
if User.is_authenticated: email = forms.EmailField(label='电子邮箱', required=False)
name = forms.CharField(label='姓名')
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
"""
if get_user_model().is_authenticated:
email = forms.EmailField(label='电子邮箱', required=False, widget=forms.HiddenInput) email = forms.EmailField(label='电子邮箱', required=False, widget=forms.HiddenInput)
name = forms.CharField(label='姓名', widget=forms.HiddenInput) name = forms.CharField(label='姓名', widget=forms.HiddenInput)
else: """
email = forms.EmailField(label='电子邮箱', required=False) """
name = forms.CharField(label='姓名') def __init__(self, user, *args, **kwargs):
# body = forms.CharField(widget=forms.Textarea, label='评论') self.user = user
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False) super(CommentForm, self).__init__(*args, **kwargs)
if self.user.is_authenticated:
self.fields.update({
'email': forms.CharField(widget=forms.HiddenInput()),
'name': forms.CharField(widget=forms.HiddenInput()),
})
"""
class Meta: class Meta:
model = Comment model = Comment
fields = ['body'] fields = ['body']

@ -7,9 +7,7 @@ from .forms import CommentForm
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from accounts.models import BlogUser
class CommentPostView(FormView): class CommentPostView(FormView):
@ -32,16 +30,21 @@ class CommentPostView(FormView):
def form_valid(self, form): def form_valid(self, form):
"""提交的数据验证合法后的逻辑""" """提交的数据验证合法后的逻辑"""
user = self.request.user
article_id = self.kwargs['article_id'] article_id = self.kwargs['article_id']
article = Article.objects.get(pk=article_id) article = Article.objects.get(pk=article_id)
if not self.request.user.is_authenticated(): if not self.request.user.is_authenticated():
pass email = form.cleaned_data['email']
author_id = self.request.user.pk username = form.cleaned_data['name']
user = get_user_model().objects.create_user(username=username, email=email, password=None)
author_id = user.pk
comment = form.save(False) comment = form.save(False)
comment.article = article comment.article = article
comment.author = BlogUser.objects.get(pk=author_id) comment.author = get_user_model().objects.get(pk=author_id)
if form.cleaned_data['parent_comment_id']: if form.cleaned_data['parent_comment_id']:
parent_comment = Comment.objects.get(pk=form.cleaned_data['parent_comment_id']) parent_comment = Comment.objects.get(pk=form.cleaned_data['parent_comment_id'])

@ -0,0 +1,40 @@
{% extends 'accountbase.html' %}
{% load static %}
{% block content %}
<div class="container">
<h2 class="form-signin-heading text-center">Sign in with your Account</h2>
<div class="card card-signin">
<img class="img-circle profile-img" src="{% static 'blog/img/avatar.png' %}" alt="">
<form class="form-signin" action="{% url 'account:login' %}" method="post">
{% csrf_token %}
{% comment %}<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" id="inputEmail" class="form-control" placeholder="Email" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" required>{% endcomment %}
{{ form.non_field_errors }}
{% for field in form %}
{{ field }}
{{ field.errors }}
{% endfor %}
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
<div class="checkbox">
<a class="pull-right">Need help?</a>
<label>
<input type="checkbox" value="remember-me"> Stay signed in
</label>
</div>
</form>
</div>
<p class="text-center">
<a>Create an account</a>
</p>
</div> <!-- /container -->
{% endblock %}

@ -0,0 +1,41 @@
{% extends 'accountbase.html' %}
{% load static %}
{% block content %}
<div class="container">
<h2 class="form-signin-heading text-center">Sign in with your Account</h2>
<div class="card card-signin">
<img class="img-circle profile-img" src="{% static 'blog/img/avatar.png' %}" alt="">
<form class="form-signin" action="{% url 'account:register' %}" method="post">
{% csrf_token %}
{% comment %}<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" id="inputEmail" class="form-control" placeholder="Email" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" required>{% endcomment %}
{{ form.non_field_errors }}
{% for field in form %}
{{ field }}
{{ field.errors }}
{% endfor %}
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
{% comment %}
<div class="checkbox">
<a class="pull-right">Need help?</a>
<label>
<input type="checkbox" value="remember-me"> Stay signed in
</label>
</div>
{% endcomment %}
</form>
</div>
<p class="text-center">
<a>Create an account</a>
</p>
</div> <!-- /container -->
{% endblock %}

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html>
<head>
{% load static %}
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Signin Template for TODC Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="{% static 'assets/css/bootstrap.min.css' %}" rel="stylesheet">
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="{% static 'assets/css/ie10-viewport-bug-workaround.css' %}" rel="stylesheet">
<!-- TODC Bootstrap core CSS -->
<link href="{% static 'assets/css/todc-bootstrap.min.css' %}" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="{% static 'assets/css/signin.css' %}" rel="stylesheet">
<script src="{% static 'assets/js/ie-emulation-modes-warning.js' %}"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
{% block content %}
{% endblock %}
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="{% static 'assets/js/ie10-viewport-bug-workaround.js' %}"></script>
</body>
</html>
Loading…
Cancel
Save