Implement optional registration
This commit is contained in:
parent
a1bfb2c711
commit
1896a8136e
15
.idea/dataSources.xml
generated
15
.idea/dataSources.xml
generated
@ -1,22 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
<data-source source="LOCAL" name="db" uuid="b92a6ddc-c3eb-4f61-9408-7ee5d46a163b">
|
<data-source source="LOCAL" name="SQLite - db.sqlite3" uuid="c880bd6d-554c-484d-a5be-45581d9a9377">
|
||||||
<driver-ref>sqlite.xerial</driver-ref>
|
<driver-ref>sqlite.xerial</driver-ref>
|
||||||
<synchronize>true</synchronize>
|
<synchronize>true</synchronize>
|
||||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db.sqlite3</jdbc-url>
|
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/data/db.sqlite3</jdbc-url>
|
||||||
<driver-properties>
|
|
||||||
<property name="enable_load_extension" value="true" />
|
|
||||||
</driver-properties>
|
|
||||||
<libraries>
|
|
||||||
<library>
|
|
||||||
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.25.1/sqlite-jdbc-3.25.1.jar</url>
|
|
||||||
</library>
|
|
||||||
<library>
|
|
||||||
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.25.1/license.txt</url>
|
|
||||||
</library>
|
|
||||||
</libraries>
|
|
||||||
</data-source>
|
</data-source>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -7,7 +7,7 @@
|
|||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" project-jdk-name="Python 3.7 (.env)" project-jdk-type="Python SDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="false" project-jdk-name="Python 3.7 (linkding)" project-jdk-type="Python SDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -1,4 +1,4 @@
|
|||||||
.login-page {
|
.auth-page {
|
||||||
> .columns {
|
> .columns {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
@ -23,4 +23,4 @@ $alternative-color-dark: darken($alternative-color, 5%);
|
|||||||
@import "shared";
|
@import "shared";
|
||||||
@import "bookmarks";
|
@import "bookmarks";
|
||||||
@import "settings";
|
@import "settings";
|
||||||
@import "login";
|
@import "auth";
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
{% extends 'bookmarks/layout.html' %}
|
||||||
|
{% load widget_tweaks %}
|
||||||
|
|
||||||
|
{% block title %}Registration complete{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="auth-page">
|
||||||
|
<div class="columns">
|
||||||
|
<section class="content-area column col-12">
|
||||||
|
<p>Registration complete. You can now use the application.</p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -0,0 +1,44 @@
|
|||||||
|
{% extends 'bookmarks/layout.html' %}
|
||||||
|
{% load widget_tweaks %}
|
||||||
|
|
||||||
|
{% block title %}Registration{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="auth-page">
|
||||||
|
<div class="columns">
|
||||||
|
<section class="content-area column col-5 col-md-12">
|
||||||
|
<div class="content-area-header">
|
||||||
|
<h2>Register</h2>
|
||||||
|
</div>
|
||||||
|
<form method="post" action="{% url 'django_registration_register' %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-group {% if form.errors.username %}has-error{% endif %}">
|
||||||
|
<label class="form-label" for="{{ form.username.id_for_label }}">Username</label>
|
||||||
|
{{ form.username|add_class:'form-input' }}
|
||||||
|
<div class="form-input-hint">{{ form.errors.username }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group {% if form.errors.email %}has-error{% endif %}">
|
||||||
|
<label class="form-label" for="{{ form.email.id_for_label }}">Email</label>
|
||||||
|
{{ form.email|add_class:'form-input' }}
|
||||||
|
<div class="form-input-hint">{{ form.errors.email }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group {% if form.errors.password1 %}has-error{% endif %}">
|
||||||
|
<label class="form-label" for="{{ form.password1.id_for_label }}">Password</label>
|
||||||
|
{{ form.password1|add_class:'form-input' }}
|
||||||
|
<div class="form-input-hint">{{ form.errors.password1 }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group {% if form.errors.password2 %}has-error{% endif %}">
|
||||||
|
<label class="form-label" for="{{ form.password2.id_for_label }}">Confirm Password</label>
|
||||||
|
{{ form.password2|add_class:'form-input' }}
|
||||||
|
<div class="form-input-hint">{{ form.errors.password2 }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" value="Register" class="btn btn-primary mt-2 col-md-12">
|
||||||
|
<input type="hidden" name="next" value="{{ next }}">
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="login-page">
|
<div class="auth-page">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<section class="content-area column col-5 col-md-12">
|
<section class="content-area column col-5 col-md-12">
|
||||||
<div class="content-area-header">
|
<div class="content-area-header">
|
||||||
@ -23,12 +23,22 @@
|
|||||||
{{ form.username|add_class:'form-input' }}
|
{{ form.username|add_class:'form-input' }}
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label" for="{{ form.username.id_for_label }}">Password</label>
|
<label class="form-label" for="{{ form.password.id_for_label }}">Password</label>
|
||||||
{{ form.password|add_class:'form-input' }}
|
{{ form.password|add_class:'form-input' }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" value="Login" class="btn btn-primary mt-2 col-md-12">
|
<div class="columns mt-2">
|
||||||
|
<div class="column col-3">
|
||||||
|
<input type="submit" value="Login" class="btn btn-primary">
|
||||||
<input type="hidden" name="next" value="{{ next }}">
|
<input type="hidden" name="next" value="{{ next }}">
|
||||||
|
</div>
|
||||||
|
{% if allow_registration %}
|
||||||
|
<div class="column col-auto col-ml-auto">
|
||||||
|
<a href="{% url 'django_registration_register' %}" class="btn btn-link">Register</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,6 +6,7 @@ django-appconf==1.0.3
|
|||||||
django-compressor==2.3
|
django-compressor==2.3
|
||||||
django-generate-secret-key==1.0.2
|
django-generate-secret-key==1.0.2
|
||||||
django-picklefield==2.0
|
django-picklefield==2.0
|
||||||
|
django-registration==3.0.1
|
||||||
django-sass-processor==0.7.3
|
django-sass-processor==0.7.3
|
||||||
django-widget-tweaks==1.4.5
|
django-widget-tweaks==1.4.5
|
||||||
idna==2.8
|
idna==2.8
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
beautifulsoup4==4.7.1
|
beautifulsoup4==4.7.1
|
||||||
certifi==2019.6.16
|
certifi==2019.6.16
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
|
confusable-homoglyphs==3.2.0
|
||||||
Django==2.2.2
|
Django==2.2.2
|
||||||
django-appconf==1.0.3
|
django-appconf==1.0.3
|
||||||
django-compressor==2.3
|
django-compressor==2.3
|
||||||
django-generate-secret-key==1.0.2
|
django-generate-secret-key==1.0.2
|
||||||
django-picklefield==2.0
|
django-picklefield==2.0
|
||||||
|
django-registration==3.0.1
|
||||||
django-sass-processor==0.7.3
|
django-sass-processor==0.7.3
|
||||||
django-widget-tweaks==1.4.5
|
django-widget-tweaks==1.4.5
|
||||||
idna==2.8
|
idna==2.8
|
||||||
|
@ -141,3 +141,6 @@ STATICFILES_FINDERS = [
|
|||||||
STATICFILES_DIRS = [
|
STATICFILES_DIRS = [
|
||||||
os.path.join(BASE_DIR, 'bookmarks', 'styles'),
|
os.path.join(BASE_DIR, 'bookmarks', 'styles'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Registration switch
|
||||||
|
ALLOW_REGISTRATION = False
|
||||||
|
@ -1 +1,3 @@
|
|||||||
# Placeholder, can be mounted in a Docker container with a custom settings
|
# Placeholder, can be mounted in a Docker container with a custom settings
|
||||||
|
|
||||||
|
# ALLOW_REGISTRATION = True
|
||||||
|
@ -16,10 +16,16 @@ Including another URLconf
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
from .settings import ALLOW_REGISTRATION
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
|
path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True,
|
||||||
|
extra_context=dict(allow_registration=ALLOW_REGISTRATION)),
|
||||||
|
name='login'),
|
||||||
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
|
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
|
||||||
path('', include('bookmarks.urls')),
|
path('', include('bookmarks.urls')),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if ALLOW_REGISTRATION:
|
||||||
|
urlpatterns.append(path('', include('django_registration.backends.one_step.urls')))
|
||||||
|
Loading…
Reference in New Issue
Block a user