Guest User

Untitled

a guest
Nov 11th, 2017
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. >python manage.py shell -c "
  2. from itemdb.models import MyUser;
  3. user = MyUser.objects.create_user('mypass','AD','Joe','Smith','1233','joe@smith.com');
  4. print user.check_password('mypass');
  5. "
  6. True
  7.  
  8. from django.conf.urls import url
  9. from . import views
  10. from django.contrib import admin
  11. from django.contrib.auth import views as auth_views
  12.  
  13. app_name= 'itemdb'
  14.  
  15. urlpatterns = [
  16.  
  17. # Authentication/Admin
  18. url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
  19. url(r'^logout/$', auth_views.logout, {'next_page':'/'}, name='logout'),
  20. url(r'^passwordreset/$', auth_views.logout, name='passwordreset'),
  21.  
  22. # Index (i.e. /itemdb/)
  23. url(r'^$', views.itemindex, name="itemindex"),
  24.  
  25. ]
  26.  
  27. {% block content %}
  28. <h2>Login</h2>
  29. <form method="post">
  30. {% csrf_token %}
  31. {{ form.as_p }}
  32. <button type="submit">Login</button>
  33. </form>
  34. {% endblock %}
  35.  
  36. ...
  37. AUTH_USER_MODEL = 'itemdb.MyUser' # Point to custom user model
  38. ...
  39.  
  40. CREATE TABLE Users (
  41. UserId INTEGER NOT NULL,
  42. UserType CHAR(2) NOT NULL,
  43. FirstName VARCHAR(100) NOT NULL,
  44. LastName VARCHAR(100) NOT NULL,
  45. PhoneNumber VARCHAR(25),
  46. EmailAddress VARCHAR(250),
  47. Password VARCHAR(128),
  48. Last_Login TIMESTAMPTZ,
  49. PRIMARY KEY(UserId)
  50. );
  51.  
  52. CREATE OR REPLACE FUNCTION $DB_NAME$Views.SP_IGLGetUser(
  53. pUserId INTEGER
  54. )
  55. RETURNS SETOF $DB_NAME$Views.Users
  56. AS
  57. $$
  58. BEGIN
  59. RETURN QUERY
  60. SELECT UserId, UserType, FirstName, LastName, PhoneNumber, EmailAddress, CAST(NULL AS VARCHAR(128)) AS Password, Last_Login
  61. FROM $DB_NAME$Views.Users
  62. WHERE (UserId = pUserId OR pUserId IS NULL) -- Return single user (if specified, otherwise return all)
  63. ;
  64. END;
  65. $$
  66. LANGUAGE 'plpgsql';
  67.  
  68. from __future__ import unicode_literals
  69. from django.db import models
  70. from UsefulFunctions.dbUtils import *
  71. from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
  72. from django.contrib.auth import get_user_model
  73.  
  74. # Data model managers (i.e. interface between DB and objects)
  75. class MyUserManager(BaseUserManager):
  76.  
  77. # Create new user
  78. def create_user(self, password, usertype = None, firstname = None, lastname = None, phonenumber = None, emailaddress = None):
  79. user = get_user_model()(
  80. userid=None,
  81. usertype=usertype,
  82. firstname=firstname,
  83. lastname=lastname,
  84. phonenumber=phonenumber,
  85. emailaddress=emailaddress
  86. )
  87.  
  88. # Save hashed password
  89. user.set_password(password)
  90.  
  91. # Save user data and update user object with newly created id
  92. result = user.save()
  93. user.userid = result[0]
  94.  
  95. return user
  96.  
  97. def get_all(self):
  98. users = getDBData(self, 'SP_IGLGetUser(%s)', (None,))
  99.  
  100. # Return list of user objects
  101. return users
  102.  
  103. # Get info for one specific user
  104. def get(self, userid):
  105. user = getDBData(self, 'SP_IGLGetUser(%s)', (userid,))
  106. return user[0] # First and only row of array
  107.  
  108. def upsertUser(self, myUser):
  109. return saveDBData('SP_IGLUpsertUser',
  110. (
  111. myUser.userid,
  112. myUser.usertype,
  113. myUser.firstname,
  114. myUser.lastname,
  115. myUser.phonenumber,
  116. myUser.emailaddress,
  117. myUser.password,
  118. myUser.last_login,
  119. None
  120. )
  121. )
  122.  
  123. def deleteUser(self, myUser):
  124. return deleteDBData('SP_IGLDeleteUser', (myUser.userid, None))
  125.  
  126. # Data models (i.e. tables)
  127. # Create custom base user
  128. class MyUser(AbstractBaseUser):
  129.  
  130. # Define attributes (inherited class includes password + last_login fields)
  131. userid = models.IntegerField(primary_key=True) # Specify as PK to prevent Django from creating "id" column and for queryset returns (raw)
  132. usertype = models.CharField(max_length=2)
  133. firstname = models.CharField(max_length=100)
  134. lastname = models.CharField(max_length=100)
  135. phonenumber = models.CharField(max_length=25)
  136. emailaddress = models.CharField(max_length=250)
  137.  
  138. # Define data manager
  139. objects = MyUserManager()
  140.  
  141. # Create new constructor (must be passed in correct order)
  142. def __init__(self, password = None, last_login = None, userid = None, usertype = None, firstname = None, lastname = None, phonenumber = None, emailaddress = None):
  143.  
  144. # Call parent's init function
  145. super(get_user_model(), self).__init__()
  146.  
  147. # Set properties
  148. self.userid = userid
  149. self.usertype = usertype
  150. self.firstname = firstname
  151. self.lastname = lastname
  152. self.phonenumber = phonenumber
  153. self.emailaddress = emailaddress
  154. self.last_login = last_login
  155.  
  156. # Class info
  157. class Meta:
  158. managed = False # Ensure Django doesn't "manage" the table
  159. db_table = 'users' # Point to actual DB table
  160.  
  161. # Required fields
  162. USERNAME_FIELD = 'userid' # specify how Django recognizes the user
  163. EMAIL_FIELD = 'emailaddress'
  164. REQUIRED_FIELDS = ['usertype','firstname','lastname'] # email and password are required by default
  165.  
  166. # Required methods
  167. def get_full_name(self):
  168. return self.firstname + " " + self.lastname + " (" + self.userid + ")"
  169.  
  170. def get_short_name(self):
  171. return self.userid
  172.  
  173. def save(self):
  174. return MyUser.objects.upsertUser(self)
  175.  
  176. def delete(self):
  177. return MyUser.objects.deleteUser(self)
  178.  
  179. from django.db import connection
  180. from collections import namedtuple
  181.  
  182. # Return all rows from a cursor as named tuples (i.e. rows with field names)
  183. def namedtuplefetchall(cursor):
  184. columns = [col[0] for col in cursor.description]
  185. nt_result = namedtuple('Result', columns)
  186.  
  187. return [
  188. nt_result(*row)
  189. for row in cursor.fetchall()
  190. ]
  191.  
  192. def getDBData(myobjects, sp_signature, params):
  193. objectlist = []
  194.  
  195. # Execute raw SQL on object manager and return RawQuerySet object
  196. objects = myobjects.raw('select * from ' + sp_signature, params)
  197.  
  198. # Convert RawQuerySet to list of model instances
  199. for myobject in objects:
  200. objectlist.append(myobject)
  201.  
  202. return objectlist
  203.  
  204. def getRawDBData (sp_name, param_list):
  205. with connection.cursor() as cursor:
  206. cursor.callproc(sp_name, param_list)
  207. return_data = namedtuplefetchall(cursor) # Create "rows"
  208. cursor.close()
  209.  
  210. return return_data
  211.  
  212. def saveDBData(sp_name, param_list):
  213. with connection.cursor() as cursor:
  214. cursor.callproc(sp_name, param_list)
  215. return_data = cursor.fetchone() # Store any output
  216. cursor.close()
  217.  
  218. return return_data
  219.  
  220. def deleteDBData(sp_name, param_list):
  221. return saveDBData(sp_name, param_list)
Add Comment
Please, Sign In to add comment