· 7 years ago · Aug 23, 2018, 09:20 AM
1#middlware.py
2
3import re
4from django.conf import settings
5from django.shortcuts import redirect
6from django.urls import reverse
7from django.contrib.auth import logout
8
9
10EXEMPT_URLS = [re.compile(settings.LOGIN_URL.lstrip('/'))]
11if hasattr(settings,'LOGIN_EXEMPT_URL'):
12 EXEMPT_URLS += [re.compile(url) for url in settings.LOGIN_EXEMPT_URL]
13
14
15class LoginRequiredMiddleware:
16
17 def __int__(self, get_response):
18 self.get_response = get_response
19
20 def __call__(self, request):
21 return self.get_response(request)
22
23 def process_view(self, request, view_func, view_args, view_kwargs):
24 assert hasattr(request, 'user')
25 path = request.path_info.lstrip('/')
26 url_is_exempt = any(url.match(path) for url in EXEMPT_URLS),
27
28 if path == reverse('logout').lstrip('/'):
29 logout(request)
30
31 if request.user.is_authenticated and url_is_exempt:
32 return redirect(settings.LOGIN_REDIRECT_URL)
33
34 elif request.user.is_authenticated or url_is_exempt:
35 return None
36
37 else:
38 return redirect(settings.LOGIN_URL)
39
40
41
42#settings.py
43
44"""
45Django settings for DMS project.
46
47Generated by 'django-admin startproject' using Django 2.0.
48
49For more information on this file, see
50https://docs.djangoproject.com/en/2.0/topics/settings/
51
52For the full list of settings and their values, see
53https://docs.djangoproject.com/en/2.0/ref/settings/
54"""
55
56import os
57
58# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
59BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
60
61
62# Quick-start development settings - unsuitable for production
63# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
64
65# SECURITY WARNING: keep the secret key used in production secret!
66SECRET_KEY = 'i!hg%9&6s8wqsk7d-$-en!(xc0nyros_d$tqzu&^1758gkpio3'
67
68# SECURITY WARNING: don't run with debug turned on in production!
69DEBUG = True
70
71ALLOWED_HOSTS = []
72
73
74# Application definition
75
76INSTALLED_APPS = [
77 'django.contrib.admin',
78 'django.contrib.auth',
79 'django.contrib.contenttypes',
80 'django.contrib.sessions',
81 'django.contrib.messages',
82 'django.contrib.staticfiles',
83 'social_django',
84 'DMS',
85 'accounts',
86 'fileupload',
87]
88
89MIDDLEWARE = [
90 'django.middleware.security.SecurityMiddleware',
91 'django.contrib.sessions.middleware.SessionMiddleware',
92 'django.middleware.common.CommonMiddleware',
93 'django.middleware.csrf.CsrfViewMiddleware',
94 'django.contrib.auth.middleware.AuthenticationMiddleware',
95 'django.contrib.messages.middleware.MessageMiddleware',
96 'django.middleware.clickjacking.XFrameOptionsMiddleware',
97 'social_django.middleware.SocialAuthExceptionMiddleware',
98 'DMS.middleware.LoginRequiredMiddleware',
99]
100
101ROOT_URLCONF = 'DMS.urls'
102
103TEMPLATES = [
104 {
105 'BACKEND': 'django.template.backends.django.DjangoTemplates',
106 'DIRS': [os.path.join(BASE_DIR, 'templates')],
107 'APP_DIRS': True,
108 'OPTIONS': {
109 'context_processors': [
110 'django.template.context_processors.debug',
111 'django.core.context_processors.auth',
112 'django.template.context_processors.request',
113 'django.contrib.auth.context_processors.auth',
114 'django.contrib.messages.context_processors.messages',
115 'social_django.context_processors.backends',
116 'social_django.context_processors.login_redirect',
117 ],
118 },
119 },
120]
121
122WSGI_APPLICATION = 'DMS.wsgi.application'
123
124
125# Database
126# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
127
128DATABASES = {
129 'default': {
130 'ENGINE': 'django.db.backends.sqlite3',
131 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
132 }
133}
134
135
136# Password validation
137# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
138
139AUTH_PASSWORD_VALIDATORS = [
140 {
141 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
142 },
143 {
144 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
145 },
146 {
147 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
148 },
149 {
150 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
151 },
152]
153
154
155AUTHENTICATION_BACKENDS = (
156
157 'social_core.backends.open_id.OpenIdAuth', #google
158 'social_core.backends.google.GoogleOpenId', #google
159 'social_core.backends.google.GoogleOAuth2', #google
160 'social_core.backends.facebook.FacebookOAuth2', #facebook
161 'django.contrib.auth.backends.ModelBackend',
162)
163
164
165# Internationalization
166# https://docs.djangoproject.com/en/2.0/topics/i18n/
167
168LANGUAGE_CODE = 'en-us'
169
170TIME_ZONE = 'UTC'
171
172USE_I18N = True
173
174USE_L10N = True
175
176USE_TZ = True
177
178# Static files (CSS, JavaScript, Images)
179# https://docs.djangoproject.com/en/2.0/howto/static-files/
180
181STATIC_URL = '/static/'
182
183LOGIN_URL = 'login'
184LOGOUT_URL = 'logout'
185LOGIN_REDIRECT_URL = 'home'
186
187LOGIN_EXEMPT_URL = (
188 r'^logout/$',
189 r'^signup/$',
190)
191
192SOCIAL_AUTH_FACEBOOK_KEY = '282200445927881' # App ID
193SOCIAL_AUTH_FACEBOOK_SECRET = 'b1efbf8fb2d70aed346f52caf2ae3313' # App Secret
194
195SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '695824590588-lcklbnfktmc0in77b7jr95qg4u1idbau.apps.googleusercontent.com'
196SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'UjVcy8Cz9xBpDP_0MWzcz9uW'
197
198SOCIAL_AUTH_LOGIN_ERROR_URL = '/settings/'
199SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/settings/'
200SOCIAL_AUTH_RAISE_EXCEPTIONS = False
201
202MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
203MEDIA_URL = '/media/'
204
205
206#urls.py
207
208from django.contrib import admin
209from django.urls import path, include
210from django.contrib.auth import views as auth_views
211from accounts import views as views
212from django.conf.urls.static import static
213from django.conf import settings
214from django.conf.urls import url
215
216urlpatterns = [
217
218 path('',views.home,name='home'),
219 path('login/', auth_views.login, name='login'),
220 url(r'^logout/$', auth_views.logout, name='logout'),
221 path('signup/', views.signup, name='signup'),
222 path('settings/',views.settings, name='settings'),
223 #path('settings/password/',views.password,name='password'),
224 path('admin/', admin.site.urls),
225 path('oauth/' , include('social_django.urls', namespace='social')),
226 path('fileupload/', include('fileupload.urls',namespace='fileupload')),
227] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
228
229
230
231#output in development server(powershell)
232
233PS C:\Users\Vikas Visking\Desktop\DMS> python manage.py runserver
234Performing system checks...
235
236System check identified no issues (0 silenced).
237August 23, 2018 - 14:43:56
238Django version 2.0, using settings 'DMS.settings'
239Starting development server at http://127.0.0.1:8000/
240Quit the server with CTRL-BREAK.
241Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000028C670D82F0>
242Traceback (most recent call last):
243 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
244 fn(*args, **kwargs)
245 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\commands\runserver.py", line 140, in inner_run
246 handler = self.get_handler(*args, **options)
247 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\contrib\staticfiles\management\commands\runserver.py", line 27, in get_handler
248 handler = super().get_handler(*args, **options)
249 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\commands\runserver.py", line 65, in get_handler
250 return get_internal_wsgi_application()
251 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\servers\basehttp.py", line 44, in get_internal_wsgi_application
252 return import_string(app_path)
253 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\utils\module_loading.py", line 17, in import_string
254 module = import_module(module_path)
255 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
256 return _bootstrap._gcd_import(name[level:], package, level)
257 File "<frozen importlib._bootstrap>", line 994, in _gcd_import
258 File "<frozen importlib._bootstrap>", line 971, in _find_and_load
259 File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
260 File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
261 File "<frozen importlib._bootstrap_external>", line 678, in exec_module
262 File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
263 File "C:\Users\Vikas Visking\Desktop\DMS\DMS\wsgi.py", line 16, in <module>
264 application = get_wsgi_application()
265 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\wsgi.py", line 13, in get_wsgi_application
266 return WSGIHandler()
267 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\wsgi.py", line 140, in __init__
268 self.load_middleware()
269 File "C:\Users\Vikas Visking\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py", line 39, in load_middleware
270 mw_instance = middleware(handler)
271TypeError: object() takes no parameters