代码结构调整

sh_branch
liangliangyy 4 years ago
parent 62285aa73c
commit 49ee385e90

@ -4,7 +4,7 @@ venv/
migrations/
!migrations/__init__.py
collectedstatic/
DjangoBlog/whoosh_index/
djangoblog/whoosh_index/
uploads/
settings_production.py
*.md

2
.gitignore vendored

@ -69,7 +69,7 @@ venv/
migrations/
!migrations/__init__.py
collectedstatic/
DjangoBlog/whoosh_index/
djangoblog/whoosh_index/
google93fd32dbd906620a.html
baidu_verify_FlHL7cUyC9.html
BingSiteAuth.xml

@ -1,56 +0,0 @@
"""DjangoBlog URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from DjangoBlog.sitemap import StaticViewSitemap, ArticleSiteMap, CategorySiteMap, TagSiteMap, UserSiteMap
from DjangoBlog.feeds import DjangoBlogFeed
from django.views.decorators.cache import cache_page
from django.conf import settings
from django.conf.urls.static import static
from DjangoBlog.admin_site import admin_site
from django.urls import include, path
sitemaps = {
'blog': ArticleSiteMap,
'Category': CategorySiteMap,
'Tag': TagSiteMap,
'User': UserSiteMap,
'static': StaticViewSitemap
}
handler404 = 'blog.views.page_not_found_view'
handler500 = 'blog.views.server_error_view'
handle403 = 'blog.views.permission_denied_view'
urlpatterns = [
url(r'^admin/', admin_site.urls),
url(r'', include('blog.urls', namespace='blog')),
url(r'mdeditor/', include('mdeditor.urls')),
url(r'', include('comments.urls', namespace='comment')),
url(r'', include('accounts.urls', namespace='account')),
url(r'', include('oauth.urls', namespace='oauth')),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
url(r'^feed/$', DjangoBlogFeed()),
url(r'^rss/$', DjangoBlogFeed()),
url(r'^search', include('haystack.urls'), name='search'),
url(r'', include('servermanager.urls', namespace='servermanager')),
url(r'', include('owntracks.urls', namespace='owntracks'))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)

@ -1,6 +1,6 @@
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /code/DjangoBlog/
WORKDIR /code/djangoblog/
RUN apt-get install default-libmysqlclient-dev -y && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD requirements.txt requirements.txt
@ -10,5 +10,5 @@ RUN pip install --upgrade pip && \
pip cache purge
ADD . .
RUN chmod +x /code/DjangoBlog/bin/docker_start.sh
ENTRYPOINT ["/code/DjangoBlog/bin/docker_start.sh"]
RUN chmod +x /code/djangoblog/bin/docker_start.sh
ENTRYPOINT ["/code/djangoblog/bin/docker_start.sh"]

@ -1,12 +1,12 @@
from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.forms import UsernameField
from django.utils.translation import gettext_lazy as _
# Register your models here.
from .models import BlogUser
from django.utils.translation import gettext, gettext_lazy as _
from django.contrib.auth.forms import UsernameField
class BlogUserCreationForm(forms.ModelForm):

@ -1,17 +1,3 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: forms.py
@time: 2016/11/20 下午3:16
"""
from django import forms
from django.contrib.auth import get_user_model, password_validation
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
@ -108,7 +94,7 @@ class ForgetPasswordForm(forms.Form):
def clean_email(self):
user_email = self.cleaned_data.get("email")
if not BlogUser.objects.filter(
email=user_email
email=user_email
).exists():
# todo 这里的报错提示可以判断一个邮箱是不是注册过,如果不想暴露可以修改
raise ValidationError("未找到邮箱对应的用户")

@ -1,9 +1,10 @@
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.urls import reverse
from DjangoBlog.utils import get_current_site
from django.utils.timezone import now
from djangoblog.utils import get_current_site
# Create your models here.

@ -1,14 +0,0 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: __init__.py
@time: 2016/11/2 下午9:15
"""

@ -3,7 +3,7 @@ from django.test import Client, RequestFactory, TestCase
from django.urls import reverse
from django.utils import timezone
from DjangoBlog.utils import *
from djangoblog.utils import *
from accounts.models import BlogUser
from blog.models import Article, Category
from . import utils
@ -83,7 +83,7 @@ class AccountTest(TestCase):
user.is_superuser = True
user.is_staff = True
user.save()
delete_sidebar_cache(user.username)
delete_sidebar_cache()
category = Category()
category.name = "categoryaaa"
category.created_time = timezone.now()

@ -1,23 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2016/11/20 下午3:52
"""
from django.conf.urls import url
from django.urls import path
from .forms import LoginForm
from . import views
from .forms import LoginForm
app_name = "accounts"

@ -1,18 +1,3 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: user_login_backend.py
@time: 2017/2/17 下午8:45
"""
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

@ -3,7 +3,7 @@ from datetime import timedelta
from django.core.cache import cache
from DjangoBlog.utils import send_email
from djangoblog.utils import send_email
_code_ttl = timedelta(minutes=5)

@ -21,7 +21,7 @@ from django.views.decorators.csrf import csrf_protect
from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic import FormView, RedirectView
from DjangoBlog.utils import send_email, get_sha256, get_current_site, generate_code
from djangoblog.utils import send_email, get_sha256, get_current_site, generate_code, delete_sidebar_cache
from . import utils
from .forms import RegisterForm, LoginForm, ForgetPasswordForm, ForgetPasswordCodeForm
from .models import BlogUser
@ -84,9 +84,8 @@ class LogoutView(RedirectView):
return super(LogoutView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
from DjangoBlog.utils import cache
cache.clear()
logout(request)
delete_sidebar_cache()
return super(LogoutView, self).get(request, *args, **kwargs)
@ -116,9 +115,7 @@ class LoginView(FormView):
form = AuthenticationForm(data=self.request.POST, request=self.request)
if form.is_valid():
from DjangoBlog.utils import cache
if cache and cache is not None:
cache.clear()
delete_sidebar_cache()
logger.info(self.redirect_field_name)
auth.login(self.request, form.get_user())

@ -1,32 +0,0 @@
#!/bin/bash
NAME="djangoblog" # Name of the application
DJANGODIR=/var/www/DjangoBlog # Django project directory
SOCKFILE=/var/www/DjangoBlog/run/gunicorn.sock # we will communicte using this unix socket
USER=root # the user to run as
GROUP=root # the group to run as
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=DjangoBlog.settings # which settings file should Django use
DJANGO_WSGI_MODULE=DjangoBlog.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /var/www/dev/python3/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /var/www/dev/python3/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-

@ -4,8 +4,8 @@ DJANGODIR=/code/DjangoBlog # Django project directory
USER=root # the user to run as
GROUP=root # the group to run as
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn
#DJANGO_SETTINGS_MODULE=DjangoBlog.settings # which settings file should Django use
DJANGO_WSGI_MODULE=DjangoBlog.wsgi # WSGI module name
#DJANGO_SETTINGS_MODULE=djangoblog.settings # which settings file should Django use
DJANGO_WSGI_MODULE=djangoblog.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"

@ -1,11 +1,12 @@
from django.contrib import admin
# Register your models here.
from .models import Article, Category, Tag, Links, SideBar, BlogSettings
from django import forms
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from django.urls import reverse
from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _
# Register your models here.
from .models import Article
class ArticleListFilter(admin.SimpleListFilter):
@ -101,7 +102,7 @@ class ArticlelAdmin(admin.ModelAdmin):
url = obj.get_full_url()
return url
else:
from DjangoBlog.utils import get_current_site
from djangoblog.utils import get_current_site
site = get_current_site().domain
return site

@ -1,22 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: context_processors.py
@time: 2016/11/6 下午4:23
"""
from .models import Category, Article, Tag, BlogSettings
from DjangoBlog.utils import cache, get_blog_setting
from datetime import datetime
import logging
from datetime import datetime
from djangoblog.utils import cache, get_blog_setting
from .models import Category, Article
logger = logging.getLogger(__name__)

@ -1,22 +1,11 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: documents.py
@time: 2019-04-05 13:05
"""
import elasticsearch.client
from elasticsearch_dsl.connections import connections
import time
from blog.models import Article
from elasticsearch_dsl import Document, InnerDoc, Date, Integer, Long, Text, Object, GeoPoint, Keyword, Boolean
import elasticsearch.client
from django.conf import settings
from elasticsearch_dsl import Document, InnerDoc, Date, Integer, Long, Text, Object, GeoPoint, Keyword, Boolean
from elasticsearch_dsl.connections import connections
from blog.models import Article
ELASTICSEARCH_ENABLED = hasattr(settings, 'ELASTICSEARCH_DSL')

@ -1,21 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: forms.py
@time: 2017/1/7 上午12:36
"""
import logging
from haystack.forms import SearchForm
from django import forms
import logging
from haystack.forms import SearchForm
logger = logging.getLogger(__name__)

@ -1,21 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: build_index.py
@time: 2019-04-20 20:39
"""
from django.core.management.base import BaseCommand
from blog.documents import ElapsedTimeDocument, ArticleDocumentManager, ElaspedTimeDocumentManager, \
ELASTICSEARCH_ENABLED
from django.core.management.base import BaseCommand
# TODO 参数化
class Command(BaseCommand):

@ -1,18 +1,6 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: build_search_words.py
@time: 2019/9/23 6:58 下午
"""
from django.core.management.base import BaseCommand
from blog.models import Article, Tag, Category
from blog.models import Tag, Category
# TODO 参数化

@ -1,20 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: clear_cache.py
@time: 2017/2/17 下午10:30
"""
from DjangoBlog.utils import cache
from django.core.management.base import BaseCommand
from djangoblog.utils import cache
class Command(BaseCommand):
help = 'clear the whole cache'

@ -1,22 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: create_testdata.py
@time: 2017/3/11 上午1:58
"""
from django.core.management.base import BaseCommand
from blog.models import Article, Tag, Category
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password
from django.core.management.base import BaseCommand
from blog.models import Article, Tag, Category
class Command(BaseCommand):
@ -49,6 +35,6 @@ class Command(BaseCommand):
article.tags.add(basetag)
article.save()
from DjangoBlog.utils import cache
from djangoblog.utils import cache
cache.clear()
self.stdout.write(self.style.SUCCESS('created test datas \n'))

@ -1,22 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
from django.core.management.base import BaseCommand
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: ping_baidu.py
@time: 2017/1/17 下午15:29
"""
from django.core.management.base import BaseCommand, CommandError
from djangoblog.spider_notify import SpiderNotify
from djangoblog.utils import get_current_site
from blog.models import Article, Tag, Category
from DjangoBlog.spider_notify import SpiderNotify
from DjangoBlog.utils import get_current_site
site = get_current_site().domain

@ -1,21 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: sync_user_avatar.py
@time: 2018/7/18 下午10:21
"""
from django.core.management.base import BaseCommand
from djangoblog.utils import save_user_avatar
from oauth.models import OAuthUser
from DjangoBlog.utils import save_user_avatar
class Command(BaseCommand):

@ -1,22 +1,9 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: middleware.py
@time: 2017/1/19 上午12:36
"""
import time
import logging
import time
from ipware import get_client_ip
from user_agents import parse
from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager
logger = logging.getLogger(__name__)

@ -10,8 +10,8 @@ from django.utils.translation import gettext_lazy as _
from mdeditor.fields import MDTextField
from uuslug import slugify
from DjangoBlog.utils import cache_decorator, cache
from DjangoBlog.utils import get_current_site
from djangoblog.utils import cache_decorator, cache
from djangoblog.utils import get_current_site
logger = logging.getLogger(__name__)
@ -361,5 +361,5 @@ class BlogSettings(models.Model):
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
from DjangoBlog.utils import cache
from djangoblog.utils import cache
cache.clear()

@ -1,20 +1,6 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: search_indexes.py
@time: 2017/1/7 上午12:44
"""
from haystack import indexes
from django.conf import settings
from blog.models import Article, Category, Tag
from blog.models import Article
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):

@ -1,14 +0,0 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: __init__.py
@time: 2016/11/2 下午9:15
"""

@ -1,18 +1,3 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: blog_tags.py
@time: 2016/11/2 下午11:10
"""
import hashlib
import logging
import random
@ -26,8 +11,8 @@ from django.template.defaultfilters import stringfilter
from django.urls import reverse
from django.utils.safestring import mark_safe
from DjangoBlog.utils import cache
from DjangoBlog.utils import get_current_site
from djangoblog.utils import cache
from djangoblog.utils import get_current_site
from blog.models import Article, Category, Tag, Links, SideBar, LinkShowType
from comments.models import Comment
from oauth.models import OAuthUser
@ -60,13 +45,13 @@ def datetimeformat(data):
@register.filter(is_safe=True)
@stringfilter
def custom_markdown(content):
from DjangoBlog.utils import CommonMarkdown
from djangoblog.utils import CommonMarkdown
return mark_safe(CommonMarkdown.get_markdown(content))
@register.simple_tag
def get_markdown_toc(content):
from DjangoBlog.utils import CommonMarkdown
from djangoblog.utils import CommonMarkdown
body, toc = CommonMarkdown.get_markdown_with_toc(content)
return mark_safe(toc), mark_safe(body)
@ -80,7 +65,7 @@ def truncatechars_content(content):
:return:
"""
from django.template.defaultfilters import truncatechars_html
from DjangoBlog.utils import get_blog_setting
from djangoblog.utils import get_blog_setting
blogsetting = get_blog_setting()
return truncatechars_html(content, blogsetting.article_sub_length)
@ -101,7 +86,7 @@ def load_breadcrumb(article):
:return:
"""
names = article.get_category_tree()
from DjangoBlog.utils import get_blog_setting
from djangoblog.utils import get_blog_setting
blogsetting = get_blog_setting()
site = get_current_site().domain
names.append((blogsetting.sitename, '/'))
@ -141,7 +126,7 @@ def load_sidebar(user, linktype):
:return:
"""
logger.info('load sidebar')
from DjangoBlog.utils import get_blog_setting
from djangoblog.utils import get_blog_setting
blogsetting = get_blog_setting()
recent_articles = Article.objects.filter(
status='p')[:blogsetting.sidebar_article_count]
@ -286,7 +271,7 @@ def load_article_detail(article, isindex, user):
:param isindex:是否列表页若是列表页只显示摘要
:return:
"""
from DjangoBlog.utils import get_blog_setting
from djangoblog.utils import get_blog_setting
blogsetting = get_blog_setting()
return {
@ -340,3 +325,9 @@ def query(qs, **kwargs):
{% endfor %}
"""
return qs.filter(**kwargs)
@register.filter
def addstr(arg1, arg2):
"""concatenate arg1 & arg2"""
return str(arg1) + str(arg2)

@ -8,7 +8,7 @@ from django.test import Client, RequestFactory, TestCase
from django.urls import reverse
from django.utils import timezone
from DjangoBlog.utils import get_current_site, get_sha256
from djangoblog.utils import get_current_site, get_sha256
from accounts.models import BlogUser
from blog.forms import BlogSearchForm
from blog.models import Article, Category, Tag, SideBar, Links
@ -85,7 +85,7 @@ class ArticleTest(TestCase):
response = self.client.get(article.get_absolute_url())
self.assertEqual(response.status_code, 200)
from DjangoBlog.spider_notify import SpiderNotify
from djangoblog.spider_notify import SpiderNotify
SpiderNotify.notify(article.get_absolute_url())
response = self.client.get(tag.get_absolute_url())
self.assertEqual(response.status_code, 200)
@ -125,7 +125,7 @@ class ArticleTest(TestCase):
f = BlogSearchForm()
f.search()
# self.client.login(username='liangliangyy', password='liangliangyy')
from DjangoBlog.spider_notify import SpiderNotify
from djangoblog.spider_notify import SpiderNotify
SpiderNotify.baidu_notify([article.get_full_url()])
from blog.templatetags.blog_tags import gravatar_url, gravatar
@ -186,7 +186,7 @@ class ArticleTest(TestCase):
'/upload?sign=' + sign, form_data, follow=True)
self.assertEqual(rsp.status_code, 200)
os.remove(imagepath)
from DjangoBlog.utils import save_user_avatar, send_email
from djangoblog.utils import save_user_avatar, send_email
send_email(['qq@qq.com'], 'testTitle', 'testContent')
save_user_avatar(
'https://www.python.org/static/img/python-logo@2x.png')

@ -1,24 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2016/11/2 下午7:15
"""
from django.urls import path
from django.views.decorators.cache import cache_page
from . import views
from haystack.forms import ModelSearchForm
from haystack.query import SearchQuerySet
from haystack.views import SearchView
app_name = "blog"
urlpatterns = [

@ -1,22 +1,22 @@
import uuid
from django.shortcuts import render
import datetime
import logging
# Create your views here.
import os
import datetime
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.conf import settings
import uuid
from django import forms
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from django.contrib.auth.decorators import login_required
from DjangoBlog.utils import cache, get_sha256, get_blog_setting
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from djangoblog.utils import cache, get_sha256, get_blog_setting
from blog.models import Article, Category, Tag, Links, LinkShowType
from comments.forms import CommentForm
import logging
logger = logging.getLogger(__name__)
@ -316,7 +316,7 @@ def refresh_memcache(request):
try:
if request.user.is_superuser:
from DjangoBlog.utils import cache
from djangoblog.utils import cache
if cache and cache is not None:
cache.clear()
return HttpResponse("ok")

@ -1,6 +1,5 @@
from django.contrib import admin
# Register your models here.
from .models import Comment
from django.urls import reverse
from django.utils.html import format_html

@ -1,22 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: forms.py
@time: 2016/11/12 下午2:45
"""
from .models import Comment
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from .models import Comment
class CommentForm(ModelForm):

@ -1,8 +1,9 @@
from django.db import models
from django.conf import settings
from blog.models import Article
from django.db import models
from django.utils.timezone import now
from blog.models import Article
# Create your models here.

@ -1,14 +0,0 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: __init__.py
@time: 2016/11/2 下午9:15
"""

@ -1,23 +1,4 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: comments_tags.py
@time: 2016/11/2 下午9:17
"""
from django import template
from django.template.loader import render_to_string
from ..models import Comment
from blog.models import Article
from comments.forms import CommentForm
register = template.Library()

@ -1,12 +1,13 @@
from django.test import Client, RequestFactory, TestCase
from blog.models import Article, Category, Tag
from django.contrib.auth import get_user_model
from DjangoBlog.utils import get_current_site
from django.urls import reverse
from django.utils import timezone
from accounts.models import BlogUser
from blog.models import Category, Article
from comments.models import Comment
from comments.templatetags.comments_tags import *
from DjangoBlog.utils import get_max_articleid_commentid
from djangoblog.utils import get_current_site
from djangoblog.utils import get_max_articleid_commentid
# Create your tests here.

@ -1,19 +1,5 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2016/11/12 下午3:03
"""
from django.urls import path
from . import views
app_name = "comments"

@ -1,22 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: utils.py
@time: 2018/10/8 10:24 PM
"""
from DjangoBlog.utils import send_email
from DjangoBlog.utils import get_current_site
import logging
from djangoblog.utils import get_current_site
from djangoblog.utils import send_email
logger = logging.getLogger(__name__)

@ -1,13 +1,12 @@
from django.shortcuts import render
# Create your views here.
from .models import Comment
from django import forms
from django.contrib.auth import get_user_model
from django.http import HttpResponseRedirect
from django.views.generic.edit import FormView
from blog.models import Article
from .forms import CommentForm
from django.views.generic.edit import FormView
from django.http import HttpResponseRedirect
from django.contrib.auth import get_user_model
from django import forms
from .models import Comment
class CommentPostView(FormView):

@ -1,34 +1,25 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: admin_site.py
@time: 2018/1/7 上午2:21
"""
from django.contrib.admin import AdminSite
from DjangoBlog.utils import get_current_site
from django.contrib.sites.admin import SiteAdmin
from django.contrib.admin.models import LogEntry
from django.contrib.sites.admin import SiteAdmin
from django.contrib.sites.models import Site
from DjangoBlog.logentryadmin import LogEntryAdmin
from blog.admin import *
from accounts.admin import *
from oauth.admin import *
from servermanager.admin import *
from blog.admin import *
from blog.models import *
from comments.admin import *
from comments.models import *
from djangoblog.logentryadmin import LogEntryAdmin
from oauth.admin import *
from oauth.models import *
from owntracks.admin import *
from owntracks.models import *
from servermanager.admin import *
from servermanager.models import *
class DjangoBlogAdminSite(AdminSite):
site_header = 'DjangoBlog administration'
site_title = 'DjangoBlog site admin'
site_header = 'djangoblog administration'
site_title = 'djangoblog site admin'
def __init__(self, name='admin'):
super().__init__(name)

@ -1,34 +1,20 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: blog_signals.py
@time: 2017/8/12 上午10:18
"""
import _thread
import logging
import django.dispatch
from django.dispatch import receiver
from django.conf import settings
from django.contrib.admin.models import LogEntry
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.core.mail import EmailMultiAlternatives
from django.db.models.signals import post_save
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.dispatch import receiver
from oauth.models import OAuthUser
from djangoblog.spider_notify import SpiderNotify
from djangoblog.utils import cache, expire_view_cache, delete_sidebar_cache, delete_view_cache
from djangoblog.utils import get_current_site
from comments.models import Comment
from comments.utils import send_comment_email
from DjangoBlog.utils import get_current_site
from DjangoBlog.utils import cache, expire_view_cache, delete_sidebar_cache, delete_view_cache
from DjangoBlog.spider_notify import SpiderNotify
from oauth.models import OAuthUser
logger = logging.getLogger(__name__)
@ -71,13 +57,11 @@ def oauth_user_login_signal_handler(sender, **kwargs):
oauthuser = OAuthUser.objects.get(id=id)
site = get_current_site().domain
if oauthuser.picture and not oauthuser.picture.find(site) >= 0:
from DjangoBlog.utils import save_user_avatar
from djangoblog.utils import save_user_avatar
oauthuser.picture = save_user_avatar(oauthuser.picture)
oauthuser.save()
delete_sidebar_cache(oauthuser.author.username)
cache.clear()
delete_sidebar_cache()
@receiver(post_save)
@ -102,6 +86,7 @@ def model_post_save_callback(
logger.error("notify sipder", ex)
if not is_update_views:
clearcache = True
if isinstance(instance, Comment):
path = instance.article.get_absolute_url()
@ -119,7 +104,7 @@ def model_post_save_callback(
comment_cache_key = 'article_comments_{id}'.format(
id=instance.article.id)
cache.delete(comment_cache_key)
delete_sidebar_cache(instance.author.username)
delete_sidebar_cache()
delete_view_cache('article_comments', [str(instance.article.pk)])
_thread.start_new(send_comment_email, (instance,))
@ -133,5 +118,5 @@ def model_post_save_callback(
def user_auth_callback(sender, request, user, **kwargs):
if user and user.username:
logger.info(user)
delete_sidebar_cache(user.username)
cache.clear()
delete_sidebar_cache()
# cache.clear()

@ -1,28 +1,11 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: elasticsearch_backend.py
@time: 2019-04-13 11:46
"""
import logging
import re
from django.utils.encoding import force_text
from elasticsearch_dsl import Q
from haystack.backends import BaseEngine, BaseSearchBackend, BaseSearchQuery, EmptyResults, log_query
from haystack.backends import BaseEngine, BaseSearchBackend, BaseSearchQuery, log_query
from haystack.models import SearchResult
from haystack.utils import log as logging
from blog.models import Article
from blog.documents import ArticleDocument, ArticleDocumentManager
from blog.models import Article
logger = logging.getLogger(__name__)

@ -1,25 +1,11 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: feed.py
@time: 2016/12/22 下午10:16
"""
from datetime import datetime
from django.contrib.auth import get_user_model
from django.contrib.syndication.views import Feed
from blog.models import Article
from django.conf import settings
from django.utils.feedgenerator import Rss201rev2Feed
from DjangoBlog.utils import CommonMarkdown
from django.contrib.auth import get_user_model
from datetime import datetime
from djangoblog.utils import CommonMarkdown
from blog.models import Article
class DjangoBlogFeed(Feed):

@ -1,27 +1,11 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: logentryadmin.py
@time: 2018/5/24 下午10:37
"""
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse, NoReverseMatch
from django.contrib import admin
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse, NoReverseMatch
from django.utils.encoding import force_text
from django.utils.html import escape
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from django.utils.safestring import mark_safe
from django.contrib import admin
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
action_names = {
ADDITION: pgettext_lazy('logentry_admin:action_type', 'Addition'),
@ -83,9 +67,9 @@ class LogEntryAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
return (
request.user.is_superuser or
request.user.has_perm('admin.change_logentry')
) and request.method != 'POST'
request.user.is_superuser or
request.user.has_perm('admin.change_logentry')
) and request.method != 'POST'
def has_delete_permission(self, request, obj=None):
return False

@ -1,5 +1,5 @@
"""
Django settings for DjangoBlog project.
Django settings for djangoblog project.
Generated by 'django-admin startproject' using Django 1.10.2.
@ -9,8 +9,8 @@ https://docs.djangoproject.com/en/1.10/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.10/ref/settings/
"""
import sys
import os
import sys
def env_to_bool(env, default):
@ -74,7 +74,7 @@ MIDDLEWARE = [
'blog.middleware.OnlineMiddleware'
]
ROOT_URLCONF = 'DjangoBlog.urls'
ROOT_URLCONF = 'djangoblog.urls'
TEMPLATES = [
{
@ -93,7 +93,7 @@ TEMPLATES = [
},
]
WSGI_APPLICATION = 'DjangoBlog.wsgi.application'
WSGI_APPLICATION = 'djangoblog.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
@ -149,7 +149,7 @@ USE_TZ = True
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'DjangoBlog.whoosh_cn_backend.WhooshEngine',
'ENGINE': 'djangoblog.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
},
}
@ -299,6 +299,6 @@ if os.environ.get('DJANGO_ELASTICSEARCH_HOST'):
}
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'DjangoBlog.elasticsearch_backend.ElasticSearchEngine',
'ENGINE': 'djangoblog.elasticsearch_backend.ElasticSearchEngine',
},
}

@ -1,24 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: sitemap.py
@time: 2016/12/15 下午10:26
"""
from django.contrib.sitemaps import Sitemap
from blog.models import Article, Category, Tag
from accounts.models import BlogUser
from django.contrib.sitemaps import GenericSitemap
from django.urls import reverse
from blog.models import Article, Category, Tag
class StaticViewSitemap(Sitemap):
priority = 0.5

@ -1,22 +1,8 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: spider_notify.py
@time: 2017/1/15 下午1:41
"""
import logging
from django.contrib.sitemaps import ping_google
import requests
from django.conf import settings
import logging
from django.contrib.sitemaps import ping_google
logger = logging.getLogger(__name__)

@ -1,21 +1,6 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: tests.py
@time: 2017/10/25 下午10:16
"""
from django.test import TestCase
from DjangoBlog.utils import *
from djangoblog.utils import *
class DjangoBlogTest(TestCase):

@ -0,0 +1,55 @@
"""djangoblog URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib.sitemaps.views import sitemap
from django.urls import include
from djangoblog.admin_site import admin_site
from djangoblog.feeds import DjangoBlogFeed
from djangoblog.sitemap import StaticViewSitemap, ArticleSiteMap, CategorySiteMap, TagSiteMap, UserSiteMap
sitemaps = {
'blog': ArticleSiteMap,
'Category': CategorySiteMap,
'Tag': TagSiteMap,
'User': UserSiteMap,
'static': StaticViewSitemap
}
handler404 = 'blog.views.page_not_found_view'
handler500 = 'blog.views.server_error_view'
handle403 = 'blog.views.permission_denied_view'
urlpatterns = [
url(r'^admin/', admin_site.urls),
url(r'', include('blog.urls', namespace='blog')),
url(r'mdeditor/', include('mdeditor.urls')),
url(r'', include('comments.urls', namespace='comment')),
url(r'', include('accounts.urls', namespace='account')),
url(r'', include('oauth.urls', namespace='oauth')),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
url(r'^feed/$', DjangoBlogFeed()),
url(r'^rss/$', DjangoBlogFeed()),
url(r'^search', include('haystack.urls'), name='search'),
url(r'', include('servermanager.urls', namespace='servermanager')),
url(r'', include('owntracks.urls', namespace='owntracks'))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)

@ -122,7 +122,7 @@ class CommonMarkdown:
def send_email(emailto, title, content):
from DjangoBlog.blog_signals import send_email_signal
from djangoblog.blog_signals import send_email_signal
send_email_signal.send(
send_email.__class__,
emailto=emailto,
@ -150,7 +150,7 @@ def get_blog_setting():
from blog.models import BlogSettings
if not BlogSettings.objects.count():
setting = BlogSettings()
setting.sitename = 'DjangoBlog'
setting.sitename = 'djangoblog'
setting.site_description = '基于Django的博客系统'
setting.site_seo_description = '基于Django的博客系统'
setting.site_keywords = 'Django,Python'
@ -207,13 +207,12 @@ def save_user_avatar(url):
return url
def delete_sidebar_cache(username):
def delete_sidebar_cache():
from django.core.cache.utils import make_template_fragment_key
from blog.models import LinkShowType
keys = (
make_template_fragment_key(
'sidebar', [
username + x]) for x in LinkShowType.values)
'sidebar', ["sidebar" + x]) for x in LinkShowType.values)
for k in keys:
logger.info('delete sidebar key:' + k)
cache.delete(k)

@ -1,17 +1,7 @@
# encoding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from whoosh.writing import AsyncWriter
from whoosh.searching import ResultsPage
from whoosh.qparser import QueryParser
from whoosh.highlight import ContextFragmenter, HtmlFormatter
from whoosh.highlight import highlight as whoosh_highlight
from whoosh.filedb.filestore import FileStorage, RamStorage
from whoosh.fields import BOOLEAN, DATETIME, IDLIST, KEYWORD, NGRAM, NGRAMWORDS, NUMERIC, Schema, TEXT
from whoosh.fields import ID as WHOOSH_ID
from whoosh.analysis import StemmingAnalyzer
from whoosh import index
from jieba.analyse import ChineseAnalyzer
import json
import os
import re
@ -19,20 +9,30 @@ import shutil
import threading
import warnings
import six
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
import six
from django.utils.datetime_safe import datetime
from django.utils.encoding import force_text
from haystack.backends import BaseEngine, BaseSearchBackend, BaseSearchQuery, EmptyResults, log_query
from haystack.constants import DJANGO_CT, DJANGO_ID, ID
from haystack.exceptions import MissingDependency, SearchBackendError, SkipDocument
from haystack.inputs import Clean, Exact, PythonData, Raw
from haystack.models import SearchResult
from haystack.utils import log as logging
from haystack.utils import get_identifier, get_model_ct
from haystack.utils import log as logging
from haystack.utils.app_loading import haystack_get_model
from jieba.analyse import ChineseAnalyzer
from whoosh import index
from whoosh.analysis import StemmingAnalyzer
from whoosh.fields import BOOLEAN, DATETIME, IDLIST, KEYWORD, NGRAM, NGRAMWORDS, NUMERIC, Schema, TEXT
from whoosh.fields import ID as WHOOSH_ID
from whoosh.filedb.filestore import FileStorage, RamStorage
from whoosh.highlight import ContextFragmenter, HtmlFormatter
from whoosh.highlight import highlight as whoosh_highlight
from whoosh.qparser import QueryParser
from whoosh.searching import ResultsPage
from whoosh.writing import AsyncWriter
try:
import whoosh
@ -853,14 +853,14 @@ class WhooshSearchBackend(BaseSearchBackend):
# Try to handle most built-in types.
if isinstance(
converted_value,
(list,
tuple,
set,
dict,
six.integer_types,
float,
complex)):
converted_value,
(list,
tuple,
set,
dict,
six.integer_types,
float,
complex)):
return converted_value
except BaseException:
# If it fails (SyntaxError or its ilk) or we don't trust it,
@ -957,7 +957,7 @@ class WhooshSearchQuery(BaseSearchQuery):
'contains',
'startswith',
'endswith',
'fuzzy']:
'fuzzy']:
if value.input_type_name == 'exact':
query_frag = prepared_value
else:

@ -1,5 +1,5 @@
"""
WSGI config for DjangoBlog project.
WSGI config for djangoblog project.
It exposes the WSGI callable as a module-level variable named ``application``.
@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoBlog.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoblog.settings")
application = get_wsgi_application()

@ -25,11 +25,11 @@ services:
djangoblog:
build: .
restart: always
command: bash -c 'sh /code/DjangoBlog/bin/docker_start.sh'
command: bash -c 'sh /code/djangoblog/bin/docker_start.sh'
ports:
- "8000:8000"
volumes:
- ./collectedstatic:/code/DjangoBlog/collectedstatic
- ./collectedstatic:/code/djangoblog/collectedstatic
environment:
- DJANGO_MYSQL_DATABASE=djangoblog
- DJANGO_MYSQL_USER=root

@ -27,11 +27,11 @@ services:
djangoblog:
build: .
restart: always
command: bash -c 'sh /code/DjangoBlog/bin/docker_start.sh'
command: bash -c 'sh /code/djangoblog/bin/docker_start.sh'
ports:
- "8000:8000"
volumes:
- ./collectedstatic:/code/DjangoBlog/collectedstatic
- ./collectedstatic:/code/djangoblog/collectedstatic
environment:
- DJANGO_MYSQL_DATABASE=djangoblog
- DJANGO_MYSQL_USER=root
@ -53,7 +53,7 @@ services:
- "443:443"
volumes:
- ./bin/nginx.conf:/etc/nginx/nginx.conf
- ./collectedstatic:/code/DjangoBlog/collectedstatic
- ./collectedstatic:/code/djangoblog/collectedstatic
links:
- djangoblog:djangoblog
container_name: nginx

@ -55,5 +55,5 @@ docker-compose -f docker-compose.yml -f docker-compose.es.yml up -d
第一次启动之后,使用如下命令来创建超级用户:
```shell
docker exec -it djangoblog python /code/DjangoBlog/manage.py createsuperuser
docker exec -it djangoblog python /code/djangoblog/manage.py createsuperuser
```

@ -17,7 +17,7 @@ ELASTICSEARCH_DSL = {
```python
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'DjangoBlog.elasticsearch_backend.ElasticSearchEngine',
'ENGINE': 'djangoblog.elasticsearch_backend.ElasticSearchEngine',
},
}
```

@ -3,7 +3,7 @@ import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoBlog.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoblog.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:

@ -1,9 +1,9 @@
import logging
from django.contrib import admin
# Register your models here.
from .models import OAuthUser, OAuthConfig
from django.urls import reverse
from django.utils.html import format_html
import logging
logger = logging.getLogger(__name__)
@ -25,8 +25,8 @@ class OAuthUserAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
return list(self.readonly_fields) + \
[field.name for field in obj._meta.fields] + \
[field.name for field in obj._meta.many_to_many]
[field.name for field in obj._meta.fields] + \
[field.name for field in obj._meta.many_to_many]
def has_add_permission(self, request):
return False

@ -1,18 +1,3 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: forms.py
@time: 2017/3/7 下午8:58
"""
from django.contrib.auth.forms import forms
from django.forms import widgets

@ -1,9 +1,8 @@
from django.db import models
# Create your models here.
from django.conf import settings
from django.utils.timezone import now
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
@ -57,7 +56,7 @@ class OAuthConfig(models.Model):
def clean(self):
if OAuthConfig.objects.filter(
type=self.type).exclude(
id=self.id).count():
id=self.id).count():
raise ValidationError(_(self.type + '已经存在'))
def __str__(self):

@ -1,26 +1,12 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: oauthmanager.py
@time: 2016/11/26 下午5:09
"""
from abc import ABCMeta, abstractmethod, abstractproperty
from oauth.models import OAuthUser, OAuthConfig
from django.conf import settings
import requests
import json
import logging
import urllib.parse
from DjangoBlog.utils import parse_dict_to_url, cache_decorator
from abc import ABCMeta, abstractmethod
import requests
from djangoblog.utils import cache_decorator
from oauth.models import OAuthUser, OAuthConfig
logger = logging.getLogger(__name__)

@ -1,14 +1 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: __init__.py
@time: 2017/3/4 下午3:22
"""

@ -1,21 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
from django import template
from django.urls import reverse
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: oauth_tags.py
@time: 2017/3/4 下午3:22
"""
from oauth.oauthmanager import get_oauth_apps
from django.urls import reverse
from django import template
from django.conf import settings
register = template.Library()
@ -27,7 +13,7 @@ def load_oauth_applications(request):
baseurl = reverse('oauth:oauthlogin')
path = request.get_full_path()
apps = list(map(lambda x: (x.ICON_NAME, '{baseurl}?type={type}&next_url={next}' .format(
apps = list(map(lambda x: (x.ICON_NAME, '{baseurl}?type={type}&next_url={next}'.format(
baseurl=baseurl, type=x.ICON_NAME, next=path)), applications))
else:
apps = []

@ -1,4 +1,5 @@
from django.test import TestCase
from .models import OAuthConfig

@ -1,20 +1,5 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2016/11/26 下午5:25
"""
from django.urls import path
from django.views.decorators.cache import cache_page
from . import views
app_name = "oauth"

@ -1,26 +1,26 @@
from django.shortcuts import render
import datetime
import logging
# Create your views here.
from urllib.parse import urlparse
import datetime
from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import get_user_model
from .models import OAuthUser
from django.contrib.auth import login
from django.shortcuts import get_object_or_404
from django.views.generic import FormView, RedirectView
from oauth.forms import RequireEmailForm
from django.urls import reverse
from django.db import transaction
from DjangoBlog.utils import send_email, get_sha256, save_user_avatar
from DjangoBlog.utils import get_current_site
from django.core.exceptions import ObjectDoesNotExist
from django.db import transaction
from django.http import HttpResponseForbidden
from .oauthmanager import get_manager_by_type, OAuthAccessTokenException
from DjangoBlog.blog_signals import oauth_user_login_signal
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.shortcuts import render
from django.urls import reverse
from django.views.generic import FormView
import logging
from djangoblog.blog_signals import oauth_user_login_signal
from djangoblog.utils import get_current_site
from djangoblog.utils import send_email, get_sha256
from oauth.forms import RequireEmailForm
from .models import OAuthUser
from .oauthmanager import get_manager_by_type, OAuthAccessTokenException
logger = logging.getLogger(__name__)

@ -1,7 +1,6 @@
from django.contrib import admin
# Register your models here.
from .models import OwnTrackLog
class OwnTrackLogsAdmin(admin.ModelAdmin):

@ -1,8 +1,9 @@
import json
from django.test import Client, RequestFactory, TestCase
from .models import OwnTrackLog
from accounts.models import BlogUser
from owntracks.views import convert_to_amap
import json
from .models import OwnTrackLog
# Create your tests here.
@ -52,7 +53,7 @@ class OwnTrackLogTest(TestCase):
s.lon = 123.234
s.lat = 34.234
s.save()
rsp = self.client.get('/owntracks/show_dates')
self.assertEqual(rsp.status_code, 200)
rsp = self.client.get('/owntracks/show_maps')

@ -1,18 +1,5 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2018/2/25 下午3:04
"""
from django.urls import path
from . import views
app_name = "owntracks"

@ -1,18 +1,18 @@
from django.shortcuts import render
# Create your views here.
import json
import datetime
import itertools
import json
import logging
from itertools import groupby
import requests
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from .models import OwnTrackLog
import logging
from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
import requests
from .models import OwnTrackLog
logger = logging.getLogger(__name__)

@ -1,20 +1,7 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: MemcacheStorage.py
@time: 2017/8/27 上午2:42
"""
from werobot.session import SessionStorage
from werobot.utils import json_loads, json_dumps
from DjangoBlog.utils import cache
from djangoblog.utils import cache
class MemcacheStorage(SessionStorage):

@ -1,6 +1,5 @@
from django.contrib import admin
# Register your models here.
from .models import commands, EmailSendLog
class CommandsAdmin(admin.ModelAdmin):

@ -1,33 +1,18 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: robot.py
@time: 2017/8/27 上午1:55
"""
import os
import re
import jsonpickle
from werobot import WeRoBot
import re
from werobot.replies import ArticlesReply, MusicReply, ImageReply, Article
from .MemcacheStorage import MemcacheStorage
from werobot.replies import ArticlesReply, Article
from django.conf import settings
from djangoblog.utils import get_sha256
from servermanager.api.blogapi import BlogApi
from servermanager.api.commonapi import TuLing
import os
import json
from DjangoBlog.utils import get_sha256
from django.conf import settings
import jsonpickle
from servermanager.models import commands
from .MemcacheStorage import MemcacheStorage
robot = WeRoBot(token=os.environ.get('DJANGO_WEROBOT_TOKEN')
or 'lylinux', enable_session=True)
or 'lylinux', enable_session=True)
memstorage = MemcacheStorage()
if memstorage.is_available:
robot.config['SESSION_STORAGE'] = memstorage
@ -45,9 +30,7 @@ tuling = TuLing()
def convert_to_articlereply(articles, message):
reply = ArticlesReply(message=message)
from blog.templatetags.blog_tags import custom_markdown, truncatechars_content
from DjangoBlog.utils import CommonMarkdown
from django.utils.safestring import mark_safe
from blog.templatetags.blog_tags import truncatechars_content
for post in articles:
imgs = re.findall(r'(?:http\:|https\:)?\/\/.*\.(?:png|jpg)', post.body)
imgurl = ''

@ -1,13 +1,14 @@
from django.test import Client, RequestFactory, TestCase
from DjangoBlog.utils import get_current_site
from .models import commands
from django.utils import timezone
from werobot.messages.messages import TextMessage
from djangoblog.utils import get_current_site
from accounts.models import BlogUser
from blog.models import Category, Article
from .robot import search, category, recents
from werobot.messages.messages import TextMessage
from .robot import MessageHandler, CommandHandler
from servermanager.api.commonapi import TuLing
from .models import commands
from .robot import MessageHandler, CommandHandler
from .robot import search, category, recents
# Create your tests here.

@ -1,20 +1,6 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2017/8/27 上午2:27
"""
from django.urls import path
from werobot.contrib.django import make_view
from .robot import robot
app_name = "servermanager"

@ -1,3 +1 @@
from django.shortcuts import render
# Create your views here.

@ -72,9 +72,30 @@
{% endblock %}
{% block sidebar %}
{% with request.user.username|add:'p' as cachekey %}
{% with "sidear"|addstr:"p" as cachekey %}
{% cache 36000 sidebar cachekey %}
{% load_sidebar user 'p' %}
{% load_sidebar user "p" %}
{% endcache %}
{% endwith %}
{% endblock %}
<div class="widget-area" role="complementary">
<aside id="meta-2" class="widget widget_meta"><h3 class="widget-title">功能</h3>
<ul>
<li><a href="/admin/" rel="nofollow">管理站点</a></li>
{% if user.is_authenticated %}
<li><a href="{% url "account:logout" %}" rel="nofollow">登出</a>
</li>
{% else %}
<li><a href="{% url "account:login" %}" rel="nofollow">登录</a></li>
{% endif %}
{% if user.is_superuser %}
<li><a href="{% url "blog:refresh" %}" target="_blank">刷新缓存</a></li>
<li><a href="{% url 'owntracks:show_dates' %}" target="_blank">运动轨迹记录</a></li>
{% endif %}
<li><a href="http://gitbook.lylinux.net" target="_blank" rel="nofollow">GitBook</a></li>
</ul>
</aside>
<div id="rocket" class="show" title="点我返回顶部"></div>
</div><!-- #secondary -->
{% endblock %}

@ -38,9 +38,30 @@
{% endblock %}
{% block sidebar %}
{% with request.user.username|add:linktype as cachekey %}
{% with "sidear"|addstr:linktype as cachekey %}
{% cache 36000 sidebar cachekey %}
{% load_sidebar user linktype %}
{% endcache %}
{% endwith %}
<div class="widget-area" role="complementary">
<aside id="meta-2" class="widget widget_meta"><h3 class="widget-title">功能</h3>
<ul>
<li><a href="/admin/" rel="nofollow">管理站点</a></li>
{% if user.is_authenticated %}
<li><a href="{% url "account:logout" %}" rel="nofollow">登出</a>
</li>
{% else %}
<li><a href="{% url "account:login" %}" rel="nofollow">登录</a></li>
{% endif %}
{% if user.is_superuser %}
<li><a href="{% url "blog:refresh" %}" target="_blank">刷新缓存</a></li>
<li><a href="{% url 'owntracks:show_dates' %}" target="_blank">运动轨迹记录</a></li>
{% endif %}
<li><a href="http://gitbook.lylinux.net" target="_blank" rel="nofollow">GitBook</a></li>
</ul>
</aside>
<div id="rocket" class="show" title="点我返回顶部"></div>
</div><!-- #secondary -->
{% endblock %}

@ -114,22 +114,6 @@
alt="GitHub forks"></a></p>
</div>
</aside>
<aside id="meta-2" class="widget widget_meta"><h3 class="widget-title">功能</h3>
<ul>
<li><a href="/admin/" rel="nofollow">管理站点</a></li>
{% if user.is_authenticated %}
<li><a href="{% url "account:logout" %}" rel="nofollow">登出</a>
</li>
{% else %}
<li><a href="{% url "account:login" %}" rel="nofollow">登录</a></li>
{% endif %}
{% if user.is_superuser %}
<li><a href="{% url "blog:refresh" %}" target="_blank">刷新缓存</a></li>
<li><a href="{% url 'owntracks:show_dates' %}" target="_blank">运动轨迹记录</a></li>
{% endif %}
<li><a href="http://gitbook.lylinux.net" target="_blank" rel="nofollow">GitBook</a></li>
</ul>
</aside>
<div id="rocket" class="show" title="点我返回顶部"></div>
</div><!-- #secondary -->

Loading…
Cancel
Save