Guest User

Untitled

a guest
May 27th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.54 KB | None | 0 0
  1. from django.conf.urls import url
  2. import django.contrib.auth.views
  3. from . import views
  4.  
  5. urlpatterns = [
  6. # Poprzedni widok logowania.
  7. # url(r'^login/$', views.user_login, name='login'),
  8.  
  9. # Wzorce adresów URL dla widoków logowania i wylogowania.
  10. url(r'^login/$',
  11. django.contrib.auth.views.login,
  12. name='login'),
  13. url(r'^logout/$',
  14. django.contrib.auth.views.logout,
  15. name='logout'),
  16. url(r'^logout-then-login/$',
  17. django.contrib.auth.views.logout_then_login,
  18. name='logout_then_login'),
  19. url(r'^$', views.dashboard, name='dashboard'),
  20.  
  21. # Adresy URL przeznaczone do obsługi zmiany hasła.
  22. url(r'^password-change/$',
  23. django.contrib.auth.views.password_change,
  24. name='password_change'),
  25. url(r'^password-change/done/$',
  26. django.contrib.auth.views.password_change_done,
  27. name='password_change_done'),
  28.  
  29. # Adresy URL przeznaczone do obsługi procedury zerowania hasła.
  30. url(r'^password-reset/$',
  31. django.contrib.auth.views.password_reset,
  32. name='password_reset'),
  33. url(r'^password-reset/done/$',
  34. django.contrib.auth.views.password_reset_done,
  35. name='password_reset_done'),
  36. url(r'^password-reset/confirm/(?P<uidb64>[-w]+)/(?P<token>[-w]+)/$',
  37. django.contrib.auth.views.password_reset_confirm,
  38. name='password_reset_confirm'),
  39. url(r'^password-reset/complete/$',
  40. django.contrib.auth.views.password_reset_complete,
  41. name='password_reset_complete'),
  42.  
  43. # Rejestracja konta użytkownika i jego profil.
  44. url(r'^register/$', views.register, name='register'),
  45. url(r'^edit/$', views.edit, name='edit'),
  46. url(r'^users/$', views.user_list, name='user_list'),
  47. url(r'^users/follow/$', views.user_follow, name='user_follow'),
  48. url(r'^users/(?P<username>[-w]+)/$',
  49. views.user_detail,
  50. name='user_detail'),
  51. ]
  52.  
  53. from django.db import models
  54. from django.conf import settings
  55. from django.contrib.auth.models import User
  56.  
  57. class Profile(models.Model):
  58. user = models.OneToOneField(settings.AUTH_USER_MODEL)
  59. date_of_birth = models.DateField(blank=True, null=True)
  60. photo = models.ImageField(upload_to='users/%Y/%m/%d',
  61. blank=True)
  62.  
  63. def __str__(self):
  64. return 'Profil użytkownika {}.'.format(self.user.username)
  65.  
  66. class Contact(models.Model):
  67. user_from = models.ForeignKey(User,
  68. related_name='rel_from_set')
  69. user_to = models.ForeignKey(User,
  70. related_name='rel_to_set')
  71. created = models.DateTimeField(auto_now_add=True,
  72. db_index=True)
  73. class Meta:
  74. ordering = ('-created',)
  75.  
  76. def __str__(self):
  77. return '{} follows {}'.format(self.user_from,
  78. self.user_to)
  79.  
  80.  
  81. # Dynamiczne dodanie poniższej kolumny do modelu User.
  82. User.add_to_class('following',
  83. models.ManyToManyField('self',
  84. through=Contact,
  85. related_name='followers',
  86. symmetrical=False))
  87.  
  88. from django import forms
  89. from django.contrib.auth.models import User
  90. from .models import Profile
  91.  
  92.  
  93. class LoginForm(forms.Form):
  94. username = forms.CharField()
  95. password = forms.CharField(widget=forms.PasswordInput)
  96.  
  97.  
  98. class UserRegistrationForm(forms.ModelForm):
  99. password = forms.CharField(label='Hasło',
  100. widget=forms.PasswordInput)
  101. password2 = forms.CharField(label='Powtórz hasło',
  102. widget=forms.PasswordInput)
  103.  
  104. class Meta:
  105. model = User
  106. fields = ('username', 'first_name', 'email')
  107.  
  108. def clean_password2(self):
  109. cd = self.cleaned_data
  110. if cd['password'] != cd['password2']:
  111. raise forms.ValidationError('Hasła nie są identyczne.')
  112. return cd['password2']
  113.  
  114.  
  115. class UserEditForm(forms.ModelForm):
  116. class Meta:
  117. model = User
  118. fields = ('first_name', 'last_name', 'email')
  119.  
  120.  
  121. class ProfileEditForm(forms.ModelForm):
  122. class Meta:
  123. model = Profile
  124. fields = ('date_of_birth', 'photo')
  125.  
  126. from django.http import HttpResponse
  127. from django.shortcuts import render
  128. from django.contrib.auth import authenticate, login
  129. from .forms import LoginForm, UserRegistrationForm, UserEditForm, ProfileEditForm
  130. from django.contrib.auth.decorators import login_required
  131. from .models import Profile
  132. from django.contrib import messages
  133. from django.shortcuts import get_object_or_404
  134. from django.contrib.auth.models import User
  135. from django.http import JsonResponse
  136. from django.views.decorators.http import require_POST
  137. from common.decorators import ajax_required
  138. from .models import Contact
  139. from actions.utils import create_action
  140. from actions.models import Action
  141.  
  142.  
  143. def user_login(request):
  144. if request.method == 'POST':
  145. form = LoginForm(request.POST)
  146. if form.is_valid():
  147. cd = form.cleaned_data
  148. user = authenticate(username=cd['username'],
  149. password=cd['password'])
  150. if user is not None:
  151. if user.is_active:
  152. login(request, user)
  153. return HttpResponse('Uwierzytelnienie zakończyło się sukcesem.')
  154. else:
  155. return HttpResponse('Konto jest zablokowane.')
  156. else:
  157. return HttpResponse('Nieprawidłowe dane uwierzytelniające.')
  158. else:
  159. form = LoginForm()
  160. return render(request, 'account/login.html', {'form': form})
  161.  
  162. @login_required
  163. def dashboard(request):
  164. # Domyślnie wyświetlane są wszystkie akcje.
  165. actions = Action.objects.exclude(user=request.user)
  166. following_ids = request.user.following.values_list('id',
  167. flat=True)
  168. if following_ids:
  169. # Jeżeli użytkownik obserwuje innych, będzie otrzymywał jedynie
  170. # informacje o podejmowanych przez nich akcjach.
  171. actions = actions.filter(user_id__in=following_ids).select_related('user', 'user__profile').prefetch_related('target')
  172. actions = actions[:10]
  173.  
  174. return render(request,
  175. 'account/dashboard.html',
  176. {'section': 'dashboard',
  177. 'actions': actions})
  178.  
  179.  
  180. def register(request):
  181. if request.method == 'POST':
  182. user_form = UserRegistrationForm(request.POST)
  183. if user_form.is_valid():
  184. # Utworzenie nowego obiektu użytkownika,
  185. # ale jeszcze nie zapisujemy go w bazie danych.
  186. new_user = user_form.save(commit=False)
  187. # Ustawienie wybranego hasła.
  188. new_user.set_password(
  189. user_form.cleaned_data['password'])
  190. # Zapisanie obiektu User.
  191. new_user.save()
  192. # Utworzenie profilu użytkownika.
  193. profile = Profile.objects.create(user=new_user)
  194. create_action(new_user, 'utworzył konto')
  195. return render(request,
  196. 'account/register_done.html',
  197. {'new_user': new_user})
  198. else:
  199. user_form = UserRegistrationForm()
  200. return render(request,
  201. 'account/register.html',
  202. {'user_form': user_form})
  203.  
  204. @login_required
  205. def edit(request):
  206. if request.method == 'POST':
  207. user_form = UserEditForm(instance=request.user,
  208. data=request.POST)
  209. profile_form = ProfileEditForm(
  210. instance=request.user.profile,
  211. data=request.POST,
  212. files=request.FILES)
  213. if user_form.is_valid() and profile_form.is_valid():
  214. user_form.save()
  215. profile_form.save()
  216. messages.success(request, 'Uaktualnienie profilu '
  217. 'zakończyło się sukcesem.')
  218. else:
  219. messages.error(request, 'Wystąpił błąd podczas uaktualniania profilu.')
  220. else:
  221. user_form = UserEditForm(instance=request.user)
  222. profile_form = ProfileEditForm(instance=request.user.profile)
  223. return render(request,
  224. 'account/edit.html',
  225. {'user_form': user_form,
  226. 'profile_form': profile_form})
  227.  
  228. @login_required
  229. def user_list(request):
  230. users = User.objects.filter(is_active=True)
  231. return render(request,
  232. 'account/user/list.html',
  233. {'section': 'people',
  234. 'users': users})
  235.  
  236. @login_required
  237. def user_detail(request, username):
  238. user = get_object_or_404(User,
  239. username=username,
  240. is_active=True)
  241. return render(request,
  242. 'account/user/detail.html',
  243. {'section': 'people',
  244. 'user': user})
  245.  
  246. @ajax_required
  247. @require_POST
  248. @login_required
  249. def user_follow(request):
  250. user_id = request.POST.get('id')
  251. action = request.POST.get('action')
  252. if user_id and action:
  253. try:
  254. user = User.objects.get(id=user_id)
  255. if action == 'follow':
  256. Contact.objects.get_or_create(
  257. user_from=request.user,
  258. user_to=user)
  259. create_action(request.user, 'obserwuje', user)
  260. else:
  261. Contact.objects.filter(user_from=request.user,
  262. user_to=user).delete()
  263. return JsonResponse({'status':'ok'})
  264. except User.DoesNotExist:
  265. return JsonResponse({'status':'ok'})
  266. return JsonResponse({'status':'ok'})
Add Comment
Please, Sign In to add comment