Implement login and logout views

This commit is contained in:
Sascha Ißbrücker
2019-07-02 09:34:12 +02:00
parent d2f896966a
commit fdcd9cb42c
8 changed files with 69 additions and 7 deletions

View File

@@ -22,3 +22,4 @@ $alternative-color-dark: darken($alternative-color, 5%);
@import "util";
@import "shared";
@import "bookmarks";
@import "login";

View File

@@ -0,0 +1,6 @@
.login-page {
> .columns {
align-items: center;
justify-content: center;
}
}

View File

@@ -7,7 +7,7 @@
<meta charset="UTF-8">
<title>linkdings</title>
{# Include SASS styles, files are resolved from bookmarks/styles #}
<link href="{% sass_src 'index.scss' %}" rel="stylesheet" type="text/css" />
<link href="{% sass_src 'index.scss' %}" rel="stylesheet" type="text/css"/>
</head>
<body>
<header class="navbar container grid-lg">
@@ -18,12 +18,15 @@
<h1>linkding</h1>
</a>
</section>
<section class="navbar-section">
<a href="{% url 'bookmarks:new' %}" class="btn btn-primary mr-2">Add bookmark</a>
<a href="/bookmarks" class="btn btn-link">Bookmarks</a>
<a href="/settings" class="btn btn-link">Settings</a>
<a href="/logout" class="btn btn-link">Logout</a>
</section>
{# Only nav items menu when logged in #}
{% if request.user.is_authenticated %}
<section class="navbar-section">
<a href="{% url 'bookmarks:new' %}" class="btn btn-primary mr-2">Add bookmark</a>
<a href="/bookmarks" class="btn btn-link">Bookmarks</a>
<a href="/settings" class="btn btn-link">Settings</a>
<a href="/logout" class="btn btn-link">Logout</a>
</section>
{% endif %}
</header>
<div class="content container grid-lg">
{% block content %}

View File

@@ -0,0 +1,38 @@
{% extends 'bookmarks/layout.html' %}
{% load widget_tweaks %}
{% block title %}Login{% endblock %}
{% block content %}
<div class="login-page">
<div class="columns">
<section class="content-area column col-5 col-sm-12">
<div class="content-area-header">
<h2>Login</h2>
</div>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{% if form.errors %}
<div class="form-group has-error">
<p class="form-input-hint">Your username and password didn't match. Please try again.</p>
</div>
{% endif %}
<div class="form-group">
<label class="form-label" for="{{ form.username.id_for_label }}">Username</label>
{{ form.username|add_class:'form-input' }}
</div>
<div class="form-group">
<label class="form-label" for="{{ form.username.id_for_label }}">Password</label>
{{ form.password|add_class:'form-input' }}
</div>
<input type="submit" value="Login" class="btn btn-primary mt-2 col-sm-12">
<input type="hidden" name="next" value="{{ next }}">
</form>
</section>
</div>
</div>
{% endblock %}

View File

@@ -1,8 +1,10 @@
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from services.website_loader import load_website_metadata
@login_required
def website_metadata(request):
url = request.GET.get('url')
metadata = load_website_metadata(url)

View File

@@ -1,3 +1,4 @@
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.http import HttpResponseRedirect
from django.shortcuts import render
@@ -10,6 +11,7 @@ from bookmarks.services.bookmarks import create_bookmark, update_bookmark
_default_page_size = 30
@login_required
def index(request):
page = request.GET.get('page')
query_string = request.GET.get('q')
@@ -31,6 +33,7 @@ def index(request):
return render(request, 'bookmarks/index.html', context)
@login_required
def new(request):
if request.method == 'POST':
form = BookmarkForm(request.POST)
@@ -44,6 +47,7 @@ def new(request):
return render(request, 'bookmarks/new.html', {'form': form})
@login_required
def edit(request, bookmark_id: int):
bookmark = Bookmark.objects.get(pk=bookmark_id)
if request.method == 'POST':
@@ -58,6 +62,7 @@ def edit(request, bookmark_id: int):
return render(request, 'bookmarks/edit.html', {'form': form, 'bookmark_id': bookmark_id})
@login_required
def remove(request, bookmark_id: int):
bookmark = Bookmark.objects.get(pk=bookmark_id)
bookmark.delete()