1 | (testenv)kondou:project/ (master) $ cat project/models/user_model.py |
---|
2 | from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin |
---|
3 | from django.core import mail, validators |
---|
4 | from django.conf import settings |
---|
5 | from django.core.urlresolvers import reverse |
---|
6 | from django.db import models |
---|
7 | from django.utils import timezone, translation |
---|
8 | from django.utils.translation import ugettext_lazy |
---|
9 | import re |
---|
10 | |
---|
11 | from project.dbutilities import date_in_one_month |
---|
12 | |
---|
13 | |
---|
14 | class UserManager(BaseUserManager): |
---|
15 | def create_user(self, username, email, password=None, to_activate=False, languagecode="en-us"): |
---|
16 | pass |
---|
17 | |
---|
18 | def create_superuser(self, username, email, password): |
---|
19 | pass |
---|
20 | |
---|
21 | class User(PermissionsMixin, AbstractBaseUser): |
---|
22 | class Meta: |
---|
23 | get_latest_by = "date_joined" |
---|
24 | |
---|
25 | username = models.CharField( |
---|
26 | ugettext_lazy('username'), max_length=30, unique=True, |
---|
27 | help_text=ugettext_lazy('30 characters or less. Letters, numbers and ./+/-/_ characters are allowed'), |
---|
28 | validators=[ |
---|
29 | validators.RegexValidator(re.compile('^[\w.+-]+$'), ugettext_lazy('Invalid username.'), 'invalid') |
---|
30 | ] |
---|
31 | ) |
---|
32 | displayname = models.CharField(max_length=150, blank=True) |
---|
33 | email = models.EmailField() |
---|
34 | email_bounced = models.BooleanField( |
---|
35 | default=False, |
---|
36 | help_text="Whether a mail to this email bounced, and no more mail should be sent to this" |
---|
37 | ) |
---|
38 | email_complained = models.BooleanField( |
---|
39 | default=False, |
---|
40 | help_text="Whether this email complained, meaning no mail, other than pwreset mails should be sent" |
---|
41 | ) |
---|
42 | banned = models.BooleanField(default=False) |
---|
43 | active = models.BooleanField(default=True) |
---|
44 | date_joined = models.DateField(auto_now_add=True) |
---|
45 | lastpwchange = models.DateTimeField(auto_now_add=True) |
---|
46 | follows = models.ManyToManyField('self', symmetrical=False, related_name="following") |
---|
47 | ignores = models.ManyToManyField( |
---|
48 | 'self', symmetrical=False, related_name="ignoring", |
---|
49 | help_text=ugettext_lazy( |
---|
50 | "Ignored means you don't get messages anymore from this user, but for them their messages seem to arrive." |
---|
51 | ) |
---|
52 | ) |
---|
53 | blocks = models.ManyToManyField( |
---|
54 | 'self', symmetrical=False, related_name="blocking", |
---|
55 | help_text=ugettext_lazy( |
---|
56 | "Blocked means you don't get messages anymore from this user and they will see a \"You're blocked\" " |
---|
57 | "message on trying to message you. They also can't comment on your gallerys either." |
---|
58 | ) |
---|
59 | ) |
---|
60 | monetization_enabled = models.BooleanField(default=False) |
---|
61 | monetization_in_queue = models.BooleanField(default=False) |
---|
62 | countrycode = models.CharField(max_length=10, blank=True) |
---|
63 | languagecode = models.CharField(max_length=10, blank=True) |
---|
64 | payment_credit = models.FloatField(default=0) |
---|
65 | avatar = models.CharField(max_length=10, unique=True, blank=True, null=True) |
---|
66 | default_moderators = models.ManyToManyField('self', related_name="default_moderators") |
---|
67 | uploader = models.BooleanField(default=False) |
---|
68 | unread_messages = models.IntegerField(default=0) |
---|
69 | |
---|
70 | USERNAME_FIELD = 'username' |
---|
71 | REQUIRED_FIELDS = ['email'] |
---|
72 | objects = UserManager() |
---|
73 | |
---|
74 | # Required methods |
---|
75 | |
---|
76 | def get_full_name(self): |
---|
77 | if self.displayname != '': |
---|
78 | return self.displayname |
---|
79 | else: |
---|
80 | return self.username |
---|
81 | |
---|
82 | def get_short_name(self): |
---|
83 | return self.username |
---|
84 | |
---|
85 | def is_active(self): |
---|
86 | return self.active |
---|
87 | |
---|
88 | # -- Own methods -- |
---|
89 | |
---|
90 | # Administrative |
---|
91 | |
---|
92 | def is_banned(self): |
---|
93 | return self.banned |
---|
94 | |
---|
95 | def set_password(self, raw_password): |
---|
96 | self.lastpwchange = timezone.now() |
---|
97 | super().set_password(raw_password) |
---|
98 | |
---|
99 | def set_countrycode(self, code): |
---|
100 | self.countrycode = code |
---|
101 | self.save() |
---|
102 | |
---|
103 | def set_languagecode(self, code): |
---|
104 | self.languagecode = code |
---|
105 | self.save() |
---|
106 | |
---|
107 | # Other |
---|
108 | |
---|
109 | def get_url(self): |
---|
110 | return reverse('userview', kwargs={'username': self.username}) |
---|
111 | |
---|
112 | |
---|
113 | class AccountActivation(models.Model): |
---|
114 | user = models.OneToOneField(User, primary_key=True) |
---|
115 | token = models.CharField( |
---|
116 | max_length=10, unique=True, |
---|
117 | validators=[validators.RegexValidator( |
---|
118 | re.compile('^[abcdefghijklmnopqrstuvwxyz\d]{10}$'), 'Invalid key', 'invalid' |
---|
119 | )] |
---|
120 | ) |
---|
121 | used = models.BooleanField(default=False) |
---|
122 | expiry = models.DateField(default=date_in_one_month) |
---|