Commit e11f60ade21caf94a7350969c66725450079e5e4
1 parent
c51fd49afc
Exists in
master
m
Showing
4 changed files
with
76 additions
and
2 deletions
Show diff stats
decrators.py
homepage/views.py
| 1 | 1 | ||
| 2 | 2 | ||
| 3 | import json | 3 | import json |
| 4 | import logging | 4 | import logging |
| 5 | from django.contrib import auth | 5 | from django.contrib import auth |
| 6 | from django.contrib.auth import logout | 6 | from django.contrib.auth import logout |
| 7 | from django.contrib.auth.decorators import login_required | 7 | from django.contrib.auth.decorators import login_required |
| 8 | from django.http import HttpResponseRedirect | 8 | from django.http import HttpResponseRedirect |
| 9 | from django.contrib.auth import get_user_model | 9 | from django.contrib.auth import get_user_model |
| 10 | from django.shortcuts import render_to_response | 10 | from django.shortcuts import render_to_response |
| 11 | from django.template import RequestContext | 11 | from django.template import RequestContext |
| 12 | from django.template.context_processors import csrf | 12 | from django.template.context_processors import csrf |
| 13 | from django.conf import settings | ||
| 13 | 14 | ||
| 14 | @login_required | 15 | @login_required |
| 15 | def homepage(request): | 16 | def homepage(request): |
| 16 | 17 | ||
| 17 | username = request.user.username | 18 | username = request.user.username |
| 18 | t = HttpResponseRedirect('/admin/') | 19 | t = HttpResponseRedirect('/admin/') |
| 19 | t.set_cookie('username', username, 864000) | 20 | t.set_cookie('username', username, 864000) |
| 20 | return t | 21 | return t |
| 21 | 22 | ||
| 22 | 23 | ||
| 23 | def mylogin(request): | 24 | def mylogin(request): |
| 24 | alert_msg= 0 | 25 | alert_msg= 0 |
| 25 | if request.method =='GET': | 26 | if request.method =='GET': |
| 26 | cookies_username = request.COOKIES.get('username','') | 27 | cookies_username = request.COOKIES.get('username','') |
| 27 | c = csrf(request) | 28 | c = csrf(request) |
| 28 | c.update({'alert_msg':alert_msg,'cookies_username:':cookies_username}) | 29 | c.update({'alert_msg':alert_msg,'cookies_username:':cookies_username}) |
| 29 | return render_to_response('login.html', c) | 30 | return render_to_response('login.html', c) |
| 30 | else: | 31 | else: |
| 31 | postdata = request.POST | 32 | postdata = request.POST |
| 32 | username = postdata.get('username','') | 33 | username = postdata.get('username','') |
| 33 | password = postdata.get('password','') | 34 | password = postdata.get('password','') |
| 34 | user = auth.authenticate(username=username, password=password) | 35 | post_params = { |
| 36 | 'comefrom': 2, | ||
| 37 | 'user_name': username, | ||
| 38 | 'password': password, | ||
| 39 | } | ||
| 40 | resp = request.post(settings.AUTH_DOMAIN, data=post_params, verify=False) | ||
| 41 | if resp.status_code == 200: | ||
| 42 | rst = resp.json() | ||
| 43 | if rst.get('status') == 1: | ||
| 44 | data = rst.get('data') | ||
| 45 | token = data.get('token') | ||
| 46 | suid = data.get('1000') | ||
| 47 | t = HttpResponseRedirect('/admin/') | ||
| 48 | t.set_cookie('pu', username, 864000) | ||
| 49 | t.set_cookie(('pt'), ) | ||
| 50 | |||
| 51 | else: | ||
| 52 | pass | ||
| 35 | if user: | 53 | if user: |
| 36 | auth.login(request, user) | 54 | auth.login(request, user) |
| 37 | t = HttpResponseRedirect('/admin/') | 55 | t = HttpResponseRedirect('/admin/') |
| 38 | t.set_cookie('username', username, 864000) | 56 | t.set_cookie('username', username, 864000) |
| 39 | return t | 57 | return t |
| 40 | 58 | ||
| 41 | 59 | ||
| 42 | def mylogout(request): | 60 | def mylogout(request): |
| 43 | logout(request) | 61 | logout(request) |
| 44 | return HttpResponseRedirect("/login/") | 62 | return HttpResponseRedirect("/login/") |
middlewares/session_middleware.py
| File was created | 1 | # coding: utf-8 | |
| 2 | |||
| 3 | import requests | ||
| 4 | from django.conf import settings | ||
| 5 | from django.core.cache import caches | ||
| 6 | from django.contrib.auth import get_user_model | ||
| 7 | from django.contrib.auth.models import AnonymousUser | ||
| 8 | |||
| 9 | class SessionWithoutLocalUserMiddleware(object): | ||
| 10 | """ | ||
| 11 | 统一权限(认证)中间件,Django系统本地不保存用户的情况使用 | ||
| 12 | """ | ||
| 13 | |||
| 14 | def __init__(self): | ||
| 15 | self.cache_alias = settings.CACHE_MIDDLEWARE_ALIAS | ||
| 16 | self.cache = caches[self.cache_alias] | ||
| 17 | self.UserModel = get_user_model() | ||
| 18 | |||
| 19 | def process_request(self, request): | ||
| 20 | if hasattr(request, "user") and getattr(request.user, "is_superuser", False): | ||
| 21 | # 对于Django系统的admin用户,这里不做任何处理 | ||
| 22 | pass | ||
| 23 | else: | ||
| 24 | pt = request.COOKIES.get('pt') | ||
| 25 | pu = request.COOKIES.get('pu') | ||
| 26 | if pt and pu: | ||
| 27 | # 能拿到统一认证session的情况,优先从缓存中拿用户 | ||
| 28 | user = self.cache.get(pu) | ||
| 29 | if not user: | ||
| 30 | # 如果缓存未命中,则直接调用统一权限,查询当前session的状态,构造用户,并存入缓存 | ||
| 31 | user_info = '' | ||
| 32 | |||
| 33 | manager = Manager() | ||
| 34 | user_info = manager.get_user_info(request) | ||
| 35 | if user_info is None: | ||
| 36 | # 查询session状态失败的情况,构造匿名用户 | ||
| 37 | user = AnonymousUser() | ||
| 38 | else: | ||
| 39 | # 查询session状态成功的情况,构造QCCRUser | ||
| 40 | user = user_info | ||
| 41 | self.cache.set(pt, user, 60) | ||
| 42 | request.user = user | ||
| 43 | else: | ||
| 44 | # 拿不到统一认证的session,将当前用户设为匿名用户 | ||
| 45 | request.user = AnonymousUser() | ||
| 46 | |||
| 47 | |||
| 48 | class Manager(object): | ||
| 49 | |||
| 50 | def __init__(self): | ||
| 51 | self.auth_domain = 'https://api.xiuyetang.com/sys/user/login' | ||
| 52 | |||
| 53 | def get_user_info(self, request): | ||
| 54 | pass |
weapp_sys/settings.py
| 1 | """ | 1 | """ |
| 2 | Django settings for weapp_sys project. | 2 | Django settings for weapp_sys project. |
| 3 | 3 | ||
| 4 | Generated by 'django-admin startproject' using Django 1.8. | 4 | Generated by 'django-admin startproject' using Django 1.8. |
| 5 | 5 | ||
| 6 | For more information on this file, see | 6 | For more information on this file, see |
| 7 | https://docs.djangoproject.com/en/1.8/topics/settings/ | 7 | https://docs.djangoproject.com/en/1.8/topics/settings/ |
| 8 | 8 | ||
| 9 | For the full list of settings and their values, see | 9 | For the full list of settings and their values, see |
| 10 | https://docs.djangoproject.com/en/1.8/ref/settings/ | 10 | https://docs.djangoproject.com/en/1.8/ref/settings/ |
| 11 | """ | 11 | """ |
| 12 | 12 | ||
| 13 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) | 13 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
| 14 | import os | 14 | import os |
| 15 | 15 | ||
| 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | # Quick-start development settings - unsuitable for production | 19 | # Quick-start development settings - unsuitable for production |
| 20 | # See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ | 20 | # See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ |
| 21 | 21 | ||
| 22 | # SECURITY WARNING: keep the secret key used in production secret! | 22 | # SECURITY WARNING: keep the secret key used in production secret! |
| 23 | SECRET_KEY = 'y7m+ekd64@hxa0ej(&w6u!itch2glt)+6imlbr7ob8=_nk%@gi' | 23 | SECRET_KEY = 'y7m+ekd64@hxa0ej(&w6u!itch2glt)+6imlbr7ob8=_nk%@gi' |
| 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 | DEBUG = True | 26 | DEBUG = True |
| 27 | 27 | ||
| 28 | ALLOWED_HOSTS = [] | 28 | ALLOWED_HOSTS = [] |
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | # Application definition | 31 | # Application definition |
| 32 | 32 | ||
| 33 | INSTALLED_APPS = ( | 33 | INSTALLED_APPS = ( |
| 34 | 'django.contrib.admin', | 34 | 'django.contrib.admin', |
| 35 | 'django.contrib.auth', | 35 | 'django.contrib.auth', |
| 36 | 'django.contrib.contenttypes', | 36 | 'django.contrib.contenttypes', |
| 37 | 'django.contrib.sessions', | 37 | 'django.contrib.sessions', |
| 38 | 'django.contrib.messages', | 38 | 'django.contrib.messages', |
| 39 | 'django.contrib.staticfiles', | 39 | 'django.contrib.staticfiles', |
| 40 | 'homepage', | 40 | 'homepage', |
| 41 | ) | 41 | ) |
| 42 | 42 | ||
| 43 | MIDDLEWARE_CLASSES = ( | 43 | MIDDLEWARE_CLASSES = ( |
| 44 | 'django.contrib.sessions.middleware.SessionMiddleware', | 44 | 'django.contrib.sessions.middleware.SessionMiddleware', |
| 45 | 'django.middleware.common.CommonMiddleware', | 45 | 'django.middleware.common.CommonMiddleware', |
| 46 | 'django.middleware.csrf.CsrfViewMiddleware', | 46 | 'django.middleware.csrf.CsrfViewMiddleware', |
| 47 | 'django.contrib.auth.middleware.AuthenticationMiddleware', | 47 | 'django.contrib.auth.middleware.AuthenticationMiddleware', |
| 48 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | 48 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', |
| 49 | 'django.contrib.messages.middleware.MessageMiddleware', | 49 | 'django.contrib.messages.middleware.MessageMiddleware', |
| 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', | 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
| 51 | 'django.middleware.security.SecurityMiddleware', | 51 | 'django.middleware.security.SecurityMiddleware', |
| 52 | ) | 52 | ) |
| 53 | 53 | ||
| 54 | ROOT_URLCONF = 'weapp_sys.urls' | 54 | ROOT_URLCONF = 'weapp_sys.urls' |
| 55 | 55 | ||
| 56 | TEMPLATES = [ | 56 | TEMPLATES = [ |
| 57 | { | 57 | { |
| 58 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', | 58 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', |
| 59 | 'DIRS': [os.path.join(BASE_DIR, 'templates')], | 59 | 'DIRS': [os.path.join(BASE_DIR, 'templates')], |
| 60 | 'APP_DIRS': True, | 60 | 'APP_DIRS': True, |
| 61 | 'OPTIONS': { | 61 | 'OPTIONS': { |
| 62 | 'context_processors': [ | 62 | 'context_processors': [ |
| 63 | 'django.template.context_processors.debug', | 63 | 'django.template.context_processors.debug', |
| 64 | 'django.template.context_processors.request', | 64 | 'django.template.context_processors.request', |
| 65 | 'django.contrib.auth.context_processors.auth', | 65 | 'django.contrib.auth.context_processors.auth', |
| 66 | 'django.contrib.messages.context_processors.messages', | 66 | 'django.contrib.messages.context_processors.messages', |
| 67 | ], | 67 | ], |
| 68 | }, | 68 | }, |
| 69 | }, | 69 | }, |
| 70 | ] | 70 | ] |
| 71 | 71 | ||
| 72 | 72 | ||
| 73 | WSGI_APPLICATION = 'weapp_sys.wsgi.application' | 73 | WSGI_APPLICATION = 'weapp_sys.wsgi.application' |
| 74 | 74 | ||
| 75 | AUTH_USER_MODEL = 'homepage.ForumUser' | 75 | AUTH_USER_MODEL = 'homepage.ForumUser' |
| 76 | 76 | ||
| 77 | # Database | 77 | # Database |
| 78 | # https://docs.djangoproject.com/en/1.8/ref/settings/#databases | 78 | # https://docs.djangoproject.com/en/1.8/ref/settings/#databases |
| 79 | 79 | ||
| 80 | DATABASES = { | 80 | DATABASES = { |
| 81 | 'default': { | 81 | 'default': { |
| 82 | 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. | 82 | 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. |
| 83 | 'NAME': 'forum', # Or path to database file if using sqlite3. | 83 | 'NAME': 'forum', # Or path to database file if using sqlite3. |
| 84 | # The following settings are not used with sqlite3: | 84 | # The following settings are not used with sqlite3: |
| 85 | 'USER': 'root', | 85 | 'USER': 'root', |
| 86 | 'PASSWORD': '', | 86 | 'PASSWORD': '', |
| 87 | 'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. | 87 | 'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. |
| 88 | 'PORT': '3306', | 88 | 'PORT': '3306', |
| 89 | } | 89 | } |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | 92 | ||
| 93 | # Internationalization | 93 | # Internationalization |
| 94 | # https://docs.djangoproject.com/en/1.8/topics/i18n/ | 94 | # https://docs.djangoproject.com/en/1.8/topics/i18n/ |
| 95 | 95 | ||
| 96 | LANGUAGE_CODE = 'zh-CN' | 96 | LANGUAGE_CODE = 'zh-CN' |
| 97 | 97 | ||
| 98 | TIME_ZONE = 'Asia/Shanghai' | 98 | TIME_ZONE = 'Asia/Shanghai' |
| 99 | 99 | ||
| 100 | USE_I18N = True | 100 | USE_I18N = True |
| 101 | 101 | ||
| 102 | USE_L10N = True | 102 | USE_L10N = True |
| 103 | 103 | ||
| 104 | USE_TZ = False | 104 | USE_TZ = False |
| 105 | 105 | ||
| 106 | DATETIME_FORMAT = 'Y-m-d H:i:s' | 106 | DATETIME_FORMAT = 'Y-m-d H:i:s' |
| 107 | TIME_FORMAT = 'H:i:s' | 107 | TIME_FORMAT = 'H:i:s' |
| 108 | 108 | ||
| 109 | 109 | ||
| 110 | STATIC_ROOT = os.path.join(BASE_DIR, 'static') | 110 | STATIC_ROOT = os.path.join(BASE_DIR, 'static') |
| 111 | STATIC_URL = '/static/' | 111 | STATIC_URL = '/static/' |
| 112 | STATICFILES_DIRS = ( | 112 | STATICFILES_DIRS = ( |
| 113 | # Put strings here, like "/home/html/static" or "C:/www/django/static". | 113 | # Put strings here, like "/home/html/static" or "C:/www/django/static". |
| 114 | # Always use forward slashes, even on Windows. | 114 | # Always use forward slashes, even on Windows. |
| 115 | # Don't forget to use absolute paths, not relative paths. | 115 | # Don't forget to use absolute paths, not relative paths. |
| 116 | 116 | ||
| 117 | # ("css", os.path.join(STATIC_ROOT,'css')), | 117 | # ("css", os.path.join(STATIC_ROOT,'css')), |
| 118 | ("js", os.path.join(STATIC_ROOT, 'js')), | 118 | ("js", os.path.join(STATIC_ROOT, 'js')), |
| 119 | ("image", os.path.join(STATIC_ROOT, 'image')), | 119 | ("image", os.path.join(STATIC_ROOT, 'image')), |
| 120 | ("css", os.path.join(STATIC_ROOT, 'css')), | 120 | ("css", os.path.join(STATIC_ROOT, 'css')), |
| 121 | ("dist", os.path.join(STATIC_ROOT, 'dist')), | 121 | ("dist", os.path.join(STATIC_ROOT, 'dist')), |
| 122 | ("plugins", os.path.join(STATIC_ROOT, 'plugins')), | 122 | ("plugins", os.path.join(STATIC_ROOT, 'plugins')), |
| 123 | ("fonts", os.path.join(STATIC_ROOT, 'fonts')), | 123 | ("fonts", os.path.join(STATIC_ROOT, 'fonts')), |
| 124 | ("font-awesome", os.path.join(STATIC_ROOT, 'font-awesome')), | 124 | ("font-awesome", os.path.join(STATIC_ROOT, 'font-awesome')), |
| 125 | ("img", os.path.join(STATIC_ROOT, 'img')), | 125 | ("img", os.path.join(STATIC_ROOT, 'img')), |
| 126 | ("bootstrap", os.path.join(STATIC_ROOT, 'bootstrap')), | 126 | ("bootstrap", os.path.join(STATIC_ROOT, 'bootstrap')), |
| 127 | ("apps/ueditor", os.path.join(STATIC_ROOT, 'ueditor')), | 127 | ("apps/ueditor", os.path.join(STATIC_ROOT, 'ueditor')), |
| 128 | ("echarts", os.path.join(STATIC_ROOT, 'echarts')), | 128 | ("echarts", os.path.join(STATIC_ROOT, 'echarts')), |
| 129 | ("ueditor", os.path.join(STATIC_ROOT, 'ueditor')), | 129 | ("ueditor", os.path.join(STATIC_ROOT, 'ueditor')), |
| 130 | ("ventor", os.path.join(STATIC_ROOT, 'ventor')), | 130 | ("ventor", os.path.join(STATIC_ROOT, 'ventor')), |
| 131 | ) | 131 | ) |
| 132 | 132 | ||
| 133 | 133 | ||
| 134 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 134 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 135 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') | 135 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') |
| 136 | MEDIA_URL = '/media/' | 136 | MEDIA_URL = '/media/' |
| 137 | 137 | ||
| 138 | LOGIN_URL = '/login/' | ||
| 138 | LOGIN_URL = '/login/' | ||
| 139 |