feat: Forum App - 2. Setup and create user registration

master
Bobson Lin 5 years ago
parent f8c29b7a14
commit bb0e3d33e8

@ -37,6 +37,8 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'forum',
'user_profile'
]
MIDDLEWARE = [

@ -14,8 +14,10 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('forum.urls')),
path('', include('user_profile.urls'))
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,15 @@
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{% static 'css/bulma.css' %}" />
<link rel="stylesheet" href="{% static 'css/bulma-helpers.css' %}" />
</head>
<body>
{% block body %} {% endblock %}
</body>
</html>

@ -0,0 +1,12 @@
{% extends 'base.html' %}
{% block title %}Index{% endblock %}
{% block body %}
<div class="container">
{% include 'navbar.html' %}
<h1>Forum Index</h1>
</div>
{% endblock %}

@ -0,0 +1,48 @@
<nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="{% url 'index' %}">
<img
src="https://bulma.io/images/bulma-logo.png"
width="112"
height="28"
/>
</a>
<a
role="button"
class="navbar-burger burger"
aria-label="menu"
aria-expanded="false"
data-target="navbarBasicExample"
>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item">
Home
</a>
<a class="navbar-item">
Documentation
</a>
</div>
<div class="navbar-end">
<div class="navbar-item">
<div class="buttons">
<a class="button is-primary" href="{% url 'register' %}">
<strong>Sign up</strong>
</a>
<a class="button is-light">
Log in
</a>
</div>
</div>
</div>
</div>
</nav>

@ -0,0 +1,6 @@
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index')
]

@ -1,3 +1,5 @@
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'forum/index.html')

@ -0,0 +1,30 @@
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class ExtendedUserCreationForm(UserCreationForm):
error_css_class = "help is-danger"
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].widget.attrs.update(
{'class': 'input', 'placeholder': 'Your username', 'required': True})
self.fields['email'].widget.attrs.update(
{'class': 'input', 'placeholder': 'Your email', 'required': True})
self.fields['password1'].widget.attrs.update(
{'class': 'input', 'placeholder': 'Your password', 'required': True})
self.fields['password2'].widget.attrs.update(
{'class': 'input', 'placeholder': 'Confirm your password', 'required': True})
def save(self, commit=True):
user = super().save(commit=False)
user.email = self.cleaned_data.get('email')
if commit:
user.save()
return user

@ -0,0 +1,69 @@
{% extends 'base.html' %}
{% block title %}Register{% endblock %}
{% block body %}
<div class="container">
{% include 'navbar.html' %}
<div class="columns has-margin-top-5">
<div class="column is-half is-offset-one-quarter">
<div class="card">
<header class="card-header">
<p class="card-header-title">
Register
</p>
</header>
<div class="card-content">
<div class="content">
<form action="" method="post">
{% csrf_token %}
<div class="field">
<label class="label">Username</label>
<div class="control">
{{ form.username }}
</div>
{{ form.username.errors }}
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
{{ form.email }}
</div>
<p class="help is-danger">
{{ form.email.errors }}
</p>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control">
{{ form.password1 }}
</div>
<p class="help is-danger">
{{ form.password1.errors }}
</p>
</div>
<div class="field">
<label class="label">Confirm password</label>
<div class="control">
{{ form.password2 }}
</div>
<p class="help is-danger">
{{ form.password2.errors }}
</p>
</div>
<div class="control">
<button class="button is-primary">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

@ -0,0 +1,6 @@
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register, name='register')
]

@ -1,3 +1,19 @@
from django.shortcuts import render
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from .forms import ExtendedUserCreationForm
# Create your views here.
def register(request):
if request.method == 'POST':
form = ExtendedUserCreationForm(request.POST)
if form.is_valid():
form.save()
# TODO: Auto login after register successfully
user = authenticate(request, username=form.cleaned_data.get('username'),
password=form.cleaned_data.get('password1'))
if user is not None:
login(request, user)
return redirect('index')
else:
form = ExtendedUserCreationForm()
return render(request, 'user_profile/register.html', {'form': form})

Loading…
Cancel
Save