Update users app, add login/registser/profile template
This commit is contained in:
parent
c1721595ee
commit
7de2d58b80
@ -10,6 +10,7 @@
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class='header-smart-baner'> <!-- TOP HEADER SMART BANER-->
|
||||
@ -21,9 +22,7 @@
|
||||
<div class='header-logo'> <a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/'> vagus </a> </div>
|
||||
<div class='header-nav'>
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/offers'>KAMPERY </a>
|
||||
<a href='#'>O NAS </a>
|
||||
<a href='#'>FAQ</a>
|
||||
<a href='#'>KONTAKT </a>
|
||||
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/add-offer'>DODAJ OFERTĘ </a>
|
||||
<div class='header-nav-bar'>
|
||||
<div class='header-nav-bar-container'>
|
||||
@ -36,7 +35,7 @@
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/profile'>Witaj, Adminie </a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/signup'>Witaj, nieznajomy </a>
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/login'>Witaj, nieznajomy </a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class='header-nav-bar-avatar'>
|
||||
|
@ -13,18 +13,20 @@
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<button id="add-form" type="button">Dodaj kolejne zdjęcie</button>
|
||||
<button id="add-form" type="button">Dodaj kolejne zdjęcie</button> <button id="delete-form" type="button">Usuń pole</button>
|
||||
<div> <button style="background-color:black; color:white" class="btn btn-outline-info" type="submit">Create Offer </button></div>
|
||||
</form>
|
||||
<script>
|
||||
let imageForm = document.querySelectorAll(".image-form")
|
||||
let container = document.querySelector("#form-container")
|
||||
let addButton = document.querySelector("#add-form")
|
||||
let deleteButton = document.querySelector("#delete-form")
|
||||
let totalForms = document.querySelector("#id_form-TOTAL_FORMS")
|
||||
|
||||
let formNum = imageForm .length-1
|
||||
addButton.addEventListener('click', addForm)
|
||||
|
||||
deleteButton.addEventListener('click', removeForm)
|
||||
|
||||
function addForm(e){
|
||||
e.preventDefault()
|
||||
|
||||
@ -37,5 +39,6 @@
|
||||
|
||||
totalForms.setAttribute('value', `${formNum+1}`)
|
||||
}
|
||||
|
||||
</script>
|
||||
{% endblock content %}
|
||||
|
@ -1,26 +0,0 @@
|
||||
{% extends 'index.html' %}
|
||||
{% load static %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form action=""" method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p}}
|
||||
{{ formset.management_form }}
|
||||
|
||||
|
||||
{% for photo in formset %}
|
||||
<div class="form-cotainer">
|
||||
<div class="image-form">
|
||||
<label> {{photo.image}} {{photo.main_image}} </label>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<button id="add-form" type="button">Dodaj kolejne zdjęcie</button>
|
||||
|
||||
<button style="background-color:black; color:white" class="btn btn-outline-info" type="submit">Create Offer </button>
|
||||
</form>
|
||||
|
||||
{% endblock content %}
|
||||
|
@ -1,39 +1,79 @@
|
||||
{% extends 'index.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="offer-detail-wrapper">
|
||||
<div class='offer-detail-row'>
|
||||
<div class='offer-detail-content'>
|
||||
<div class='offer-detail-stauts'>
|
||||
{% if offer.status != 'Active'%}
|
||||
<span class='offer-detail-status-info'> OFERTA NIEAKTYWNA </span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class='offer-detail-title'>
|
||||
<span class='offer-detail-title-text'> {{offer.title}} </span>
|
||||
</div>
|
||||
|
||||
<div class='offer-detail-images'>
|
||||
<div class='offer-detail-images-img-thumbnail'>
|
||||
{% if offer.images.all %}
|
||||
{% for photo in offer.images.all %}
|
||||
{% if photo.main_image == True%}
|
||||
<img src="{{ photo.image.url }}" width = 600px>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%endif%}
|
||||
</div>
|
||||
<div class='offer-detail-images-gallery'>
|
||||
{% if offer.images.all %}
|
||||
{% for photo in offer.images.all %}
|
||||
<img src="{{ photo.image.url }}" width = 300px>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class='offer-detail-description'>
|
||||
<span class='offer-detail-description-text'> {{offer.description}} </span>
|
||||
</div>
|
||||
|
||||
<div class='offer-detail-parameters'>
|
||||
<ul>
|
||||
<li> 'DMC' <b> {{offer.DMC}} </b> </li>
|
||||
<li> 'Places_to_sleep' <b> {{offer.Places_to_sleep}} </b></li>
|
||||
<li> 'cooker' <b> {{offer.cooker}} </b></li>
|
||||
<li> 'fridge' <b> {{offer.fridge}} </b></li>
|
||||
<li> 'microwave' <b> {{offer.microwave}} </b></li>
|
||||
<li> 'Webasto' <b> {{offer.Webasto}} </b></li>
|
||||
<li> 'auto_temp_control' <b> {{offer.auto_temp_control}} </b></li>
|
||||
<li> 'water_level_indicator' <b> {{offer.water_level_indicator}} </b> </li>
|
||||
<li> 'battery_level'<b> {{offer.battery_level}} </b> </li>
|
||||
<li> 'photovoltaic_panels' <b> {{offer.photovoltaic_panels}} </b> </li>
|
||||
<li> 'gearbox <b> {{offer.gearbox}} </b> </li>
|
||||
<li> 'tempomat' <b> {{offer.tempomat}} </b> </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class='offer-reservation'>
|
||||
<form id="form-container" method="POST" class="reservation-form">
|
||||
|
||||
{% csrf_token %}
|
||||
{{ form.media }}
|
||||
{{form.as_p}}
|
||||
|
||||
<button style="background-color:black; color:white" class="btn btn-outline-info" type="submit">Wyślij zapytanie</button>
|
||||
</form>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
{% if offer.status != 'Active'%}
|
||||
<h1> OFERTA NIEKATYWNA </h1>
|
||||
{% endif %}
|
||||
|
||||
<h1> {{ offer.title }} </h1>
|
||||
{{offer.created_by}}
|
||||
<p> {{ offer.price }} PLN / dzień</p>
|
||||
<ul>
|
||||
<li> 'DMC' <b> {{offer.DMC}} </b> </li>
|
||||
<li> 'Places_to_sleep' <b> {{offer.Places_to_sleep}} </b></li>
|
||||
<li> 'cooker' <b> {{offer.cooker}} </b></li>
|
||||
<li> 'fridge' <b> {{offer.fridge}} </b></li>
|
||||
<li> 'microwave' <b> {{offer.microwave}} </b></li>
|
||||
<li> 'Webasto' <b> {{offer.Webasto}} </b></li>
|
||||
<li> 'auto_temp_control' <b> {{offer.auto_temp_control}} </b></li>
|
||||
<li> 'water_level_indicator' <b> {{offer.water_level_indicator}} </b> </li>
|
||||
<li> 'battery_level'<b> {{offer.battery_level}} </b> </li>
|
||||
<li> 'photovoltaic_panels' <b> {{offer.photovoltaic_panels}} </b> </li>
|
||||
<li> 'gearbox <b> {{offer.gearbox}} </b> </li>
|
||||
<li> 'tempomat' <b> {{offer.tempomat}} </b> </li>
|
||||
</ul>
|
||||
|
||||
<h2> THUMBNAIL </h2>
|
||||
|
||||
|
||||
<h2> GALLERY </h2>
|
||||
{% for photo in offer.images.all %}
|
||||
<img src="{{ photo.image.url }}" width = 600px>
|
||||
{% endfor %}
|
41
vagus/template/users/login.html
Executable file
41
vagus/template/users/login.html
Executable file
@ -0,0 +1,41 @@
|
||||
{% extends 'index.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<main class="login-form">
|
||||
<div class="cotainer">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Login</div>
|
||||
<div class="card-body">
|
||||
<form action="" method="POST">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
<div class="form-group row">
|
||||
<label for="email_address" class="col-md-4 col-form-label text-md-right">{{field.label_tag}}</label>
|
||||
<div class="col-md-6">
|
||||
{{field}}
|
||||
{% for error in field.errors %}
|
||||
<p style="color: red">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Login
|
||||
</button>
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/register'>Nie masz konta? Zarejestruj się!</a>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
{% endblock %}
|
@ -21,9 +21,60 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class='profile-wrapper-row-content'>
|
||||
{% for offer in offers%}
|
||||
{{offer.id}}
|
||||
{% endfor %}
|
||||
{% if user_offers %}
|
||||
<h4> Moje oferty </h4>
|
||||
<table class="table ">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Tytuł oferty</th>
|
||||
<th scope="col">Data Dodania</th>
|
||||
<th scope="col">Kategoria</th>
|
||||
<th scope="col">Cena</th>
|
||||
<th scope="col">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for offer in user_offers %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ offer.get_absolute_url }}">{{ offer.title }}</a>
|
||||
</td>
|
||||
<td title="{{ offer.date_added}}">{{ offer.date_added }}</td>
|
||||
<td>{{ offer.category }}</td>
|
||||
<td>{{ offer.price|capfirst }}</td>
|
||||
<td> {{offer.status}} </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif%}
|
||||
{% if user_reservations %}
|
||||
<h4> Moje rezerwacje </h4>
|
||||
<table class="table ">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Tytuł oferty</th>
|
||||
<th scope="col">Data rezerwacji</th>
|
||||
<th scope="col">Początek rezerwacji</th>
|
||||
<th scope="col">Koniec rezerwacji</th>
|
||||
<th scope="col">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for reservation in user_reservations %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ reservation.offer.get_absolute_url }}">{{ reservation.offer.title }}</a>
|
||||
</td>
|
||||
<td title="{{ reservation.created_date}}">{{ reservation.created_date }}</td>
|
||||
<td>{{ reservation.reservation_start_date }}</td>
|
||||
<td>{{ reservation.reservation_end_date }}</td>
|
||||
<td> {{reservation.status}} </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
41
vagus/template/users/register.html
Executable file
41
vagus/template/users/register.html
Executable file
@ -0,0 +1,41 @@
|
||||
{% extends 'index.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<main class="my-form">
|
||||
<div class="cotainer">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Register</div>
|
||||
<div class="card-body">
|
||||
<form name="my-form" method="POST">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="email_address" class="col-md-4 col-form-label text-md-right">{{field.label_tag}}</label>
|
||||
<div class="col-md-6">
|
||||
{{field}}
|
||||
{% for error in field.errors %}
|
||||
<p style="color: red">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Register
|
||||
</button>
|
||||
<a href='{{ request.scheme }}://{{ request.META.HTTP_HOST }}/login'>Masz ju konto? Zaloguj się!</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
{% endblock %}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,13 +1,10 @@
|
||||
from django.contrib import admin
|
||||
from .models import Base_User, OwnerUser, NormalUser
|
||||
from .models import Base_User, OwnerUser
|
||||
from .forms import CustomUserCreationForm, CustomUserChangeForm
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
class NormalUserInline(admin.StackedInline):
|
||||
model = NormalUser
|
||||
can_delete = False
|
||||
verbose_name_plural = 'Normal user'
|
||||
|
||||
|
||||
class OwnerUserInLine(admin.StackedInline):
|
||||
model = OwnerUser
|
||||
@ -20,17 +17,17 @@ class CustomUserAdmin(UserAdmin):
|
||||
form = CustomUserChangeForm
|
||||
model = Base_User
|
||||
|
||||
inlines = (NormalUserInline,OwnerUserInLine)
|
||||
inlines = [OwnerUserInLine,]
|
||||
|
||||
list_display = ('id','email', "is_staff", "is_active","is_superuser",'status')
|
||||
fieldsets = (
|
||||
(None, {'fields': ('email','phone','first_name','last_name', 'password','status','avatar')}),
|
||||
(None, {'fields': ('email','first_name','last_name', 'password','status','avatar')}),
|
||||
('Permissions', {'fields': ('is_staff', 'is_active',)}),
|
||||
)
|
||||
add_fieldsets = (
|
||||
(None, {
|
||||
'classes': ('wide',),
|
||||
'fields': ('email','phone','first_name','last_name', 'password1', 'password2', 'is_staff', 'is_active','status','avatar')}
|
||||
'fields': ('email','first_name','last_name', 'password1', 'password2', 'is_staff', 'is_active','status','avatar')}
|
||||
),
|
||||
)
|
||||
ordering = ('email',)
|
||||
|
@ -6,17 +6,20 @@ from .models import Base_User
|
||||
|
||||
|
||||
class CustomUserCreationForm(UserCreationForm):
|
||||
phone = PhoneNumberField()
|
||||
email = forms.EmailField(max_length=254,)
|
||||
|
||||
class Meta(UserCreationForm):
|
||||
model = Base_User
|
||||
fields =['email','password','phone']
|
||||
fields =['email','first_name','last_name','avatar']
|
||||
|
||||
|
||||
|
||||
class CustomUserChangeForm(UserChangeForm):
|
||||
phone = PhoneNumberField()
|
||||
class Meta:
|
||||
model = Base_User
|
||||
fields = ['email','password','phone']
|
||||
fields = ['email','first_name','last_name','avatar']
|
||||
|
||||
|
||||
class LoginForm(forms.Form):
|
||||
|
||||
class Meta:
|
||||
model = Base_User
|
||||
fields = ['email','password']
|
@ -1,4 +1,4 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-09 19:40
|
||||
# Generated by Django 3.1.3 on 2021-02-05 14:58
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
@ -22,10 +22,13 @@ class Migration(migrations.Migration):
|
||||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('email', models.EmailField(max_length=254, unique=True, verbose_name='Email')),
|
||||
('first_name', models.CharField(default='', max_length=30, verbose_name='First Name')),
|
||||
('last_name', models.CharField(default='', max_length=30, verbose_name='Last name')),
|
||||
('avatar', models.ImageField(blank=True, null=True, upload_to='media/avatars')),
|
||||
('is_staff', models.BooleanField(default=False)),
|
||||
('is_active', models.BooleanField(default=True)),
|
||||
('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='Date joined')),
|
||||
('status', models.CharField(choices=[('Company_Account', 'Company account'), ('Regular_Account', 'Regular account'), ('Need_verification', 'Wait for verification'), ('BaseAcc', 'Base account'), ('Moderaotr', 'Moderator')], default='BaseAcc', max_length=32)),
|
||||
('status', models.CharField(choices=[('Company_Account', 'Company account'), ('Regular_Account', 'Regular account'), ('Need_verification', 'Wait for verification'), ('BaseAcc', 'Base account'), ('Moderator', 'Moderator')], default='BaseAcc', max_length=32)),
|
||||
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
|
||||
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
|
||||
],
|
||||
@ -38,8 +41,6 @@ class Migration(migrations.Migration):
|
||||
name='OwnerUser',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('first_name', models.CharField(max_length=30, verbose_name='First Name')),
|
||||
('last_name', models.CharField(max_length=30, verbose_name='Last name')),
|
||||
('company_name', models.CharField(blank=True, max_length=30, verbose_name='Company name')),
|
||||
('user', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
@ -48,8 +49,6 @@ class Migration(migrations.Migration):
|
||||
name='NormalUser',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('first_name', models.CharField(max_length=30, verbose_name='First Name')),
|
||||
('last_name', models.CharField(max_length=30, verbose_name='Last name')),
|
||||
('birth_date', models.DateField(blank=True, null=True, verbose_name='Birth date')),
|
||||
('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
|
@ -1,39 +0,0 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-14 11:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='normaluser',
|
||||
name='first_name',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='normaluser',
|
||||
name='last_name',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='owneruser',
|
||||
name='first_name',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='owneruser',
|
||||
name='last_name',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='base_user',
|
||||
name='first_name',
|
||||
field=models.CharField(default='', max_length=30, verbose_name='First Name'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='base_user',
|
||||
name='last_name',
|
||||
field=models.CharField(default='', max_length=30, verbose_name='Last name'),
|
||||
),
|
||||
]
|
21
vagus/users/migrations/0002_auto_20210205_1512.py
Executable file
21
vagus/users/migrations/0002_auto_20210205_1512.py
Executable file
@ -0,0 +1,21 @@
|
||||
# Generated by Django 3.1.3 on 2021-02-05 15:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='base_user',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('Company_Account', 'Company account'), ('Need_verification', 'Wait for verification'), ('BaseAcc', 'Base account'), ('Moderator', 'Moderator')], default='BaseAcc', max_length=32),
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='NormalUser',
|
||||
),
|
||||
]
|
@ -1,18 +0,0 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-14 11:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_auto_20210114_1136'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='base_user',
|
||||
name='avatar',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='media/avatars'),
|
||||
),
|
||||
]
|
@ -1,18 +0,0 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-14 20:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0003_base_user_avatar'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='base_user',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('Company_Account', 'Company account'), ('Regular_Account', 'Regular account'), ('Need_verification', 'Wait for verification'), ('BaseAcc', 'Base account'), ('Moderator', 'Moderator')], default='BaseAcc', max_length=32),
|
||||
),
|
||||
]
|
@ -1,19 +0,0 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-26 19:13
|
||||
|
||||
from django.db import migrations
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0004_auto_20210114_2051'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='base_user',
|
||||
name='phone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, default='', max_length=128, null=True, region=None, unique=True),
|
||||
),
|
||||
]
|
@ -1,19 +0,0 @@
|
||||
# Generated by Django 3.1.3 on 2021-01-28 13:55
|
||||
|
||||
from django.db import migrations
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0005_base_user_phone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='base_user',
|
||||
name='phone',
|
||||
field=phonenumber_field.modelfields.PhoneNumberField(default='', max_length=128, region=None, unique=True),
|
||||
),
|
||||
]
|
Binary file not shown.
BIN
vagus/users/migrations/__pycache__/0002_auto_20210205_1512.cpython-37.pyc
Executable file
BIN
vagus/users/migrations/__pycache__/0002_auto_20210205_1512.cpython-37.pyc
Executable file
Binary file not shown.
BIN
vagus/users/migrations/__pycache__/0007_remove_base_user_phone.cpython-37.pyc
Executable file
BIN
vagus/users/migrations/__pycache__/0007_remove_base_user_phone.cpython-37.pyc
Executable file
Binary file not shown.
Binary file not shown.
@ -6,7 +6,6 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
STATUS =(
|
||||
('Company_Account', _('Company account')),
|
||||
('Regular_Account',_('Regular account')),
|
||||
('Need_verification', _("Wait for verification")),
|
||||
('BaseAcc',_('Base account')),
|
||||
('Moderator',_('Moderator')),
|
||||
@ -42,7 +41,6 @@ class UserManager(BaseUserManager):
|
||||
class Base_User(AbstractBaseUser,PermissionsMixin):
|
||||
id = models.AutoField(primary_key= True)
|
||||
email = models.EmailField(_('Email'), unique= True)
|
||||
phone = PhoneNumberField(null = False, blank = False, unique = True, default = '')
|
||||
avatar = models.ImageField(upload_to='media/avatars', null = True, blank = True,default='media/avatars/default.png')
|
||||
|
||||
first_name = models.CharField(_('First Name'), max_length=30, blank = False, default = '')
|
||||
@ -54,7 +52,6 @@ class Base_User(AbstractBaseUser,PermissionsMixin):
|
||||
is_active = models.BooleanField(default=True)
|
||||
|
||||
date_joined = models.DateTimeField(_('Date joined'),auto_now_add=True)
|
||||
#last_login = models.DateTimeField(_("Last Login"),auto_now_add= Tr )
|
||||
status = models.CharField(max_length=32, choices=STATUS, default='BaseAcc')
|
||||
|
||||
USERNAME_FIELD = 'email'
|
||||
@ -67,13 +64,6 @@ class Base_User(AbstractBaseUser,PermissionsMixin):
|
||||
class Meta:
|
||||
verbose_name = "User"
|
||||
verbose_name_plural = "Users"
|
||||
|
||||
|
||||
class NormalUser(models.Model):
|
||||
user = models.OneToOneField(Base_User, on_delete=models.CASCADE, blank= True,null = True )
|
||||
birth_date = models.DateField(_('Birth date'),null=True, blank=True)
|
||||
#add fields Country, state, postal code, city, address1, address2
|
||||
|
||||
|
||||
|
||||
class OwnerUser(models.Model):
|
||||
|
@ -2,9 +2,12 @@ from django.conf.urls import url
|
||||
from django.urls import path
|
||||
from django.conf.urls.static import static
|
||||
from . import views
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('profile', views.ProfileView.as_view(), name = 'profile_view'),
|
||||
path('profile', login_required(views.user_profile), name = 'profile_view'),
|
||||
path('logout', views.logout_view, name ='logout_user'),
|
||||
path('register',views.Register_View.as_view(), name = 'register'),
|
||||
path('login',views.Login_View.as_view(),name = 'login'),
|
||||
]
|
@ -1,38 +1,27 @@
|
||||
from django.shortcuts import render
|
||||
from .forms import CustomUserCreationForm
|
||||
from .forms import CustomUserCreationForm, LoginForm
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.decorators import method_decorator
|
||||
from .models import Base_User, NormalUser, OwnerUser
|
||||
from .models import Base_User,OwnerUser
|
||||
from django.views.generic import (
|
||||
View,
|
||||
CreateView,
|
||||
FormView
|
||||
)
|
||||
from django.contrib.auth import logout
|
||||
from django.contrib.auth import authenticate,login,logout
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.contrib import messages
|
||||
from camper.models import Offer
|
||||
from reservation.models import Reservation
|
||||
from django.contrib.auth import views as auth_views
|
||||
|
||||
# Create your views here.
|
||||
#REJESTRACJA BASE USERA NASTĘPNIE WYBOR JAKI RODZAJ KONTA UZYTKOWNIK CCHE ZALOZYC
|
||||
# * W PRZYPADKU Klikniecia 'Wynajmij swoj kamper' autoatmtycznie wybierz rodzaj konta na OwnerUser
|
||||
|
||||
class RegisterBaseUser(): # tworzy BaseUsera ze statusem BaseACC dla NormalUser i OwnerUser
|
||||
|
||||
def register_create_base_user(self,request):
|
||||
pass
|
||||
|
||||
def register_auth_email(self):
|
||||
pass
|
||||
|
||||
class UserPickAccStatus(): #uzytkownik wybiera swoj rodzaj konta i uzuieplnia danymi
|
||||
pass
|
||||
|
||||
class UpgradeProfileToOwnerUser(): #uzytkownik moze w kazdej cwhili zmienic swoje konto na konto firmowe
|
||||
pass
|
||||
|
||||
class DowngradeProfileToNormalUser(): #uzytkownik moze zawieisc swoje konto firmowa wracajac na status konta NormalUser
|
||||
pass
|
||||
|
||||
class ProfileView(View):
|
||||
|
||||
@ -40,19 +29,57 @@ class ProfileView(View):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["offers"] = Offer.objects.filter(created_by = self.Base_User)
|
||||
return context
|
||||
@method_decorator(login_required,name='dispatch')
|
||||
|
||||
@method_decorator(login_required)
|
||||
def get(self,request):
|
||||
self.Base_User = request.user
|
||||
return render(request,'users/profile.html', {'Base_User':Base_User})
|
||||
|
||||
|
||||
|
||||
|
||||
def user_profile(request):
|
||||
user = request.user
|
||||
template_name = 'users/profile.html'
|
||||
if user.status == ' Company_Account' or user.status =='Moderator':
|
||||
user_offers = Offer.objects.filter(created_by = request.user).order_by('-date_added')
|
||||
user_reservations = Reservation.objects.filter(user = request.user).order_by('-reservation_start_date')
|
||||
return render(request,template_name, {'user':user, 'user_offers':user_offers, 'user_reservations':user_reservations})
|
||||
if user.status == 'BaseAcc':
|
||||
user_reservations = Reservation.objects.filter(user = request.user).order_by('-reservation_start_date')
|
||||
return render(request,template_name, {'user':user,'user_reservation':user_reservations})
|
||||
|
||||
class EditProfile(): #edycja danych w profilu - zmiana hasłą + zmiana danych
|
||||
pass
|
||||
class Register_View(FormView):
|
||||
|
||||
def get(self,request,*args,**kwargs):
|
||||
if request.user.is_authenticated:
|
||||
return redirect('/profile')
|
||||
else:
|
||||
context = {}
|
||||
form = CustomUserCreationForm()
|
||||
context['form'] = form
|
||||
return render(request,'users/register.html',context)
|
||||
|
||||
def post(self,request,*args,**kwargs):
|
||||
context = {}
|
||||
if request.POST:
|
||||
form = CustomUserCreationForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
email = form.cleaned_data.get('email')
|
||||
raw_password = form.cleaned_data.get('password1')
|
||||
account = authenticate(email = email, password = raw_password)
|
||||
login(request,account)
|
||||
return redirect('/')
|
||||
else:
|
||||
context['form'] = form
|
||||
else:
|
||||
form = CustomUserCreationForm()
|
||||
context['form'] = form
|
||||
return render(request,'users/register.html', context)
|
||||
|
||||
class Login_View(auth_views.LoginView):
|
||||
template_name = 'users/login.html'
|
||||
success_url = '/profile'
|
||||
def logout_view(request):
|
||||
logout(request)
|
||||
messages.success(request,'Zostałeś poprawnie wylogowany')
|
||||
|
Loading…
Reference in New Issue
Block a user