mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
Began development of custom user action backend, and basic templating.
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
from django.contrib.postgres.search import SearchVector
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
|
||||
# Create your models here.
|
||||
|
||||
@@ -40,12 +42,13 @@ class Books(models.Model):
|
||||
def generic_search(self, query):
|
||||
try:
|
||||
results = Books.objects.annotate(
|
||||
search=SearchVector("title", "file_name", "author","tags"),
|
||||
search=SearchVector("title", "file_name", "author", "tags"),
|
||||
).filter(search=query)
|
||||
except Exception as e:
|
||||
raise
|
||||
return results
|
||||
|
||||
|
||||
class Collections(models.Model):
|
||||
class Meta:
|
||||
db_table = "collections"
|
||||
@@ -69,6 +72,7 @@ class Collections(models.Model):
|
||||
raise
|
||||
return results
|
||||
|
||||
|
||||
class Navigation(models.Model):
|
||||
"""
|
||||
pyShelfs Navigation Database class
|
||||
@@ -105,38 +109,6 @@ class Navigation(models.Model):
|
||||
raise
|
||||
return results
|
||||
|
||||
class Users(models.Model):
|
||||
"""
|
||||
pyShelfs User Database class
|
||||
:param uname: User Name
|
||||
:param fname: First Name
|
||||
:param lname: Last Name
|
||||
:param email: User Email Address
|
||||
:param password: User Password
|
||||
:param ulvl: User Level
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
db_table = "users"
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
uname = models.CharField(max_length=255)
|
||||
fname = models.CharField(max_length=255, null=True)
|
||||
lname = models.CharField(max_length=255, null=True)
|
||||
email = models.CharField(max_length=255, null=True, editable=True)
|
||||
password = models.CharField(max_length=255, null=True)
|
||||
ulvl = models.IntegerField(null=True)
|
||||
|
||||
def generic_search(self, query):
|
||||
try:
|
||||
results = Users.objects.annotate(
|
||||
search=SearchVector("uname", "email", "lname"),
|
||||
).filter(search=query)
|
||||
except Exception as e:
|
||||
raise
|
||||
return results
|
||||
|
||||
class Favorites(models.Model):
|
||||
"""
|
||||
@@ -152,7 +124,7 @@ class Favorites(models.Model):
|
||||
return self.title
|
||||
|
||||
favorite = models.ManyToManyField(Books)
|
||||
uname = models.ManyToManyField(Users)
|
||||
uname = models.ManyToManyField(settings.AUTH_USER_MODEL)
|
||||
|
||||
def generic_search(self, query):
|
||||
try:
|
||||
@@ -162,3 +134,11 @@ class Favorites(models.Model):
|
||||
except Exception as e:
|
||||
raise
|
||||
return results
|
||||
|
||||
|
||||
class CustomUser(AbstractUser):
|
||||
facebook = models.CharField(max_length=255, null=True)
|
||||
twitter = models.CharField(max_length=255, null=True)
|
||||
ulvl = models.IntegerField(default=1)
|
||||
sponsorid = models.IntegerField(null=True)
|
||||
matrixid = models.CharField(max_length=255, null=True)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
dfqqyn*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),{define:e.define,require:e.require}})();
|
||||
(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),{define:e.define,require:e.require}})();
|
||||
|
||||
BIN
src/interface/static/img/inspectocat.jpg
vendored
Normal file
BIN
src/interface/static/img/inspectocat.jpg
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
16
src/interface/templates/index.html
vendored
16
src/interface/templates/index.html
vendored
@@ -27,10 +27,10 @@
|
||||
<input type="hidden" id="_order" name="_order" value="{{ Order }}" />
|
||||
<div id="pop_over_0">
|
||||
<!-- Login Form -->
|
||||
<div class="hdr_nav" id="hdr_nav_login">
|
||||
<input id="username" class="nav_login input_box noborder" type="text" size="8" value="Username">
|
||||
<input id="password" class="nav_login input_box noborder" type="text" size="8" value="Password">
|
||||
</div>
|
||||
<div class="hdr_nav" id="hdr_nav_login">
|
||||
<input id="username" class="nav_login input_box noborder" type="text" size="8" value="Username">
|
||||
<input id="password" class="nav_login input_box noborder" type="text" size="8" value="Password">
|
||||
</div>
|
||||
<!-- End Login Form -->
|
||||
</div>
|
||||
<div id="app">
|
||||
@@ -44,9 +44,9 @@
|
||||
<li class="nav_menu_tab"><i class="fas fa-star"></i> Favorites</li>
|
||||
<li class="nav_menu_tab"><i class="fas fa-bug"></i> Bug report</li>
|
||||
<li class="nav_menu_tab" id="btn_login"> <i class="fa fa-user-circle" aria-hidden="true"></i> Login</li>
|
||||
</div>
|
||||
</div>
|
||||
<div id="horiz_nav_main">
|
||||
</div>
|
||||
</div>
|
||||
<div id="horiz_nav_main">
|
||||
<div id="horiz_nav_left">
|
||||
<i class="fas fa-arrow-circle-left nav_icon prev_page" onclick="window.location.href = '/prev_page/{{ Set }}/{{ Order }}'"></i>
|
||||
sort <i class="fas fa-sort nav_icon"></i>
|
||||
@@ -88,7 +88,7 @@
|
||||
{% elif book.description == None %}
|
||||
<li class="book_description">
|
||||
<div class="inline_sys_message">
|
||||
We were unable to find a description in this books metadata.
|
||||
We were unable to find a description.
|
||||
<br />Have some <i class="fas fa-drumstick-bite"></i> instead?
|
||||
</div>
|
||||
</li>
|
||||
|
||||
23
src/interface/templates/login.html
vendored
Normal file
23
src/interface/templates/login.html
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Login</h2>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
<div class="fieldWrapper">
|
||||
{{ field.errors }}
|
||||
{{ field.label_tag }} {{ field }}
|
||||
{% if field.help_text %}
|
||||
<p class="help">{{ field.help_text|safe }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button type="submit">Login</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
22
src/interface/templates/registration/login.html
vendored
Normal file
22
src/interface/templates/registration/login.html
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Login</h2>
|
||||
<form method="post">
|
||||
{% for field in form %}
|
||||
<div class="fieldWrapper">
|
||||
{{ field.errors }}
|
||||
{{ field.label_tag }} {{ field }}
|
||||
{% if field.help_text %}
|
||||
<p class="help">{{ field.help_text|safe }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button type="submit">Login</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
26
src/interface/templates/signup.html
vendored
Normal file
26
src/interface/templates/signup.html
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Sign up</h2>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
<p>
|
||||
{{ field.label_tag }}<br>
|
||||
{{ field }}
|
||||
{% if field.help_text %}
|
||||
<small style="color: grey">{{ field.help_text }}</small>
|
||||
{% endif %}
|
||||
{% for error in field.errors %}
|
||||
<p style="color: red">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endfor %}
|
||||
<button type="submit">Sign up</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user