diff --git a/moto_user/.DS_Store b/moto_user/.DS_Store index 9bf2014..5008ddf 100644 Binary files a/moto_user/.DS_Store and b/moto_user/.DS_Store differ diff --git a/moto_user/migrations/0001_initial.py b/moto_user/migrations/0001_initial.py deleted file mode 100644 index fddd3d9..0000000 --- a/moto_user/migrations/0001_initial.py +++ /dev/null @@ -1,47 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-21 00:00 - -import django.contrib.auth.models -import django.contrib.auth.validators -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='MotoUser', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('display_name', models.CharField(max_length=30)), - ('bio', models.CharField(max_length=300)), - ('bike', models.CharField(max_length=50)), - ('riding_style', models.CharField(choices=[('RIDING_STYLE_EXAMPLE1', 'riding_style_example1'), ('RIDING_STYLE_EXAMPLE2', 'riding_style_example2'), ('RIDING_STYLE_EXAMPLE3', 'riding_style_example3')], default='JUST STARTING', max_length=21)), - ('riding_level', models.CharField(choices=[('RIDING_LEVEL_EXAMPLE1', 'riding_level_example1'), ('RIDING_LEVEL_EXAMPLE2', 'riding_level_example2'), ('RIDING_LEVEL_EXAMPLE3', 'riding_level_example3')], default='JUST STARTING', max_length=21)), - ('avatar', models.ImageField(default='/images/avatar/default.png', null=True, upload_to='images/avatar/')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - ] diff --git a/moto_user/migrations/0002_initial.py b/moto_user/migrations/0002_initial.py deleted file mode 100644 index eff1722..0000000 --- a/moto_user/migrations/0002_initial.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-21 00:00 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('moto_user', '0001_initial'), - ('post', '0001_initial'), - ('recipe', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='motouser', - name='favorite_posts', - field=models.ManyToManyField(blank=True, related_name='_moto_user_motouser_favorite_posts_+', to='post.Post'), - ), - migrations.AddField( - model_name='motouser', - name='favorite_recipes', - field=models.ManyToManyField(blank=True, related_name='_moto_user_motouser_favorite_recipes_+', to='recipe.Recipe'), - ), - migrations.AddField( - model_name='motouser', - name='following', - field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL), - ), - migrations.AddField( - model_name='motouser', - name='groups', - field=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'), - ), - migrations.AddField( - model_name='motouser', - name='user_permissions', - field=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'), - ), - ] diff --git a/moto_user/migrations/__init__.py b/moto_user/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/moto_user/models.py b/moto_user/models.py index c26435c..beecb1d 100644 --- a/moto_user/models.py +++ b/moto_user/models.py @@ -40,15 +40,10 @@ class MotoUser(AbstractUser): favorite_recipes = models.ManyToManyField('recipe.Recipe', symmetrical=False, related_name='+', blank=True) avatar = models.ImageField( - default='/images/avatar/default.png', upload_to='images/avatar/', + verbose_name='Avatar', null=True ) def __str__(self): return self.display_name - - -def image_url(self): - if self.avatar and hasattr(self.avatar, 'url'): - return self.avatar.url diff --git a/moto_user/urls.py b/moto_user/urls.py index 6be3cb7..2dabb22 100644 --- a/moto_user/urls.py +++ b/moto_user/urls.py @@ -2,6 +2,7 @@ from . import views + urlpatterns = [ path('profile//', views.MotoUserView, name='MotoUserView'), path('edit/profile//', views.EditProfileView, name='EditProfileView'), @@ -11,5 +12,8 @@ path("unfavorite_recipe//", views.Remove_Favorite_Recipe, name='RemoveFaveRecipe'), path("follow//", views.Follow_View, name='FollowView'), path("unfollow//", views.Unfollow_View, name='UnfollowView'), - path('following/all//', views.Following_View, name='FollowingList') + path('following/all//', views.Following_View, name='FollowingList'), + path('favorites/all//', views.Favorites_View, name='FavoritesList'), + path('explore_users//', views.All_Users, name='AllUsers') + ] \ No newline at end of file diff --git a/moto_user/views.py b/moto_user/views.py index 857d3fa..4c4ff0c 100644 --- a/moto_user/views.py +++ b/moto_user/views.py @@ -4,13 +4,15 @@ from .models import MotoUser from .forms import EditProfileForm + # Create your views here. def MotoUserView(request, user_id: int): - + avatar = request.FILES profile = MotoUser.objects.get(id=user_id) - return render(request, 'profile.html', {"profile": profile}) + posts = Post.objects.filter(user=user_id) + return render(request, 'profile.html', {"profile": profile, "avatar": avatar, "posts": posts}) def EditProfileView(request, user_id: int): @@ -114,3 +116,11 @@ def Unfollow_View(request, user_id: int): def Following_View(request, user_id: int): following = request.user.following.exclude(following=user_id) return render(request, 'following.html', {'following': following}) + +def Favorites_View(request, user_id: int): + MotoUserView(request, user_id=user_id) + return render(request, 'favorites.html') + +def All_Users(request, user_id:int): + all_users = MotoUser.objects.all().exclude(id=user_id) + return render(request, 'all_users.html',{'all_users':all_users}) \ No newline at end of file diff --git a/motogram/settings.py b/motogram/settings.py index cbe2e4a..918b983 100644 --- a/motogram/settings.py +++ b/motogram/settings.py @@ -26,11 +26,8 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -# if DEBUG is False: -# ALLOWED_HOSTS = [ -# '127.0.0.1:8000', -# # '*', -# ] +ALLOWED_HOSTS = [] + # Application definition diff --git a/notification/migrations/0001_initial.py b/notification/migrations/0001_initial.py deleted file mode 100644 index d5ba258..0000000 --- a/notification/migrations/0001_initial.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-21 00:00 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('post', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Notification', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('read', models.BooleanField(default=False)), - ('date_created', models.DateTimeField(auto_now_add=True)), - ('post_to_notify', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='post.post')), - ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/post/migrations/0001_initial.py b/post/migrations/0001_initial.py deleted file mode 100644 index 4f80f34..0000000 --- a/post/migrations/0001_initial.py +++ /dev/null @@ -1,77 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-21 00:00 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import post.models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Post', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('picture', models.ImageField(upload_to=post.models.user_directory_path, verbose_name='Picture')), - ('caption', models.TextField(max_length=500, verbose_name='Caption')), - ('posted', models.DateTimeField(default=django.utils.timezone.now)), - ('likes', models.IntegerField(default=0)), - ], - ), - migrations.CreateModel( - name='Tag', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=80, verbose_name='Tag')), - ('slug', models.SlugField(unique=True)), - ], - options={ - 'verbose_name': 'Tag', - 'verbose_name_plural': 'Tags', - }, - ), - migrations.CreateModel( - name='Stream', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField()), - ('following', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='stream_following', to=settings.AUTH_USER_MODEL)), - ('post', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='post.post')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='PostFileContent', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('file', models.FileField(upload_to=post.models.user_directory_path)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_owner', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.AddField( - model_name='post', - name='tags', - field=models.ManyToManyField(related_name='tags', to='post.Tag'), - ), - migrations.AddField( - model_name='post', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.CreateModel( - name='Likes', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='post_like', to=settings.AUTH_USER_MODEL)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_like', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/post/urls.py b/post/urls.py index e8773a7..7e0c8b1 100644 --- a/post/urls.py +++ b/post/urls.py @@ -1,7 +1,9 @@ -from post.views import index, NewPost +from post.views import index, NewPost, post_detail_view from django.urls import path urlpatterns = [ path('', index, name='index'), - path('newpost/', NewPost, name='newpost') + path('newpost/', NewPost, name='newpost'), + path('post_detail//', post_detail_view) + ] diff --git a/post/views.py b/post/views.py index 4ec79b0..d758276 100644 --- a/post/views.py +++ b/post/views.py @@ -9,9 +9,10 @@ @login_required def index(request): + avatar = request.FILES posts = Post.objects.all().order_by('-id') template = loader.get_template('index.html') - context = {'post_items': posts, } + context = {'post_items': posts, 'avatar': avatar } return HttpResponse(template.render(context, request)) @@ -51,3 +52,7 @@ def handler404(request, exception, template_name="404.html"): def handler500(request, *args, **argv): return render(request, '500.html', status=500) + +def post_detail_view(request, post_id:int): + post = Post.objects.get(id=post_id) + return render(request, 'post_detail.html',{'post':post}) \ No newline at end of file diff --git a/recipe/migrations/0001_initial.py b/recipe/migrations/0001_initial.py deleted file mode 100644 index 6995679..0000000 --- a/recipe/migrations/0001_initial.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 3.2.5 on 2021-07-21 00:00 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Tag', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('caption', models.CharField(max_length=20)), - ], - ), - migrations.CreateModel( - name='Recipe', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50)), - ('description', models.TextField()), - ('time_required', models.CharField(max_length=10)), - ('instruction', models.TextField()), - ('image', models.ImageField(blank=True, null=True, upload_to='recipes')), - ('date', models.DateTimeField(auto_now=True)), - ('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='recipes', to=settings.AUTH_USER_MODEL)), - ('favorites', models.ManyToManyField(blank=True, related_name='favorite_recipes', to='recipe.Recipe')), - ('tags', models.ManyToManyField(blank=True, related_name='tags', to='recipe.Tag')), - ], - ), - ] diff --git a/templates/all_users.html b/templates/all_users.html new file mode 100644 index 0000000..8ee6acd --- /dev/null +++ b/templates/all_users.html @@ -0,0 +1,7 @@ +{% extends 'base.html' %}{% load static %} {% block content %} +
+ {% for each in all_users %} +
{{each.display_name}}
+ {%endfor%} +
+{% endblock content %} \ No newline at end of file diff --git a/templates/favorites.html b/templates/favorites.html new file mode 100644 index 0000000..05264b5 --- /dev/null +++ b/templates/favorites.html @@ -0,0 +1,81 @@ +{% extends "base.html" %} +{% load static %} +{% block content %} + +
+
+
+
+ {% if avatar.url %} + + {%else%} + + {%endif%} +
+ + +
+ +
+
+ +

+ {{request.user.bio}} 🏕️ +

+ My Trusty Two-Wheeled Steed is a + {{request.user.bike}} +

+ Catch Me Ridin {{request.user.riding_style}} +

+ I Ride Like a {{request.user.riding_level}} +
+
+ +
+
+ +
+
+ {% if user.is_authenticated and request.user%} + +
+
Back to My Posts
+ + + + {% endfor %} +
+ + {%else %} + Log into {{request.user.username}}'s Profile to view their saves. + {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/templates/home.html b/templates/home.html index 0f68288..9d2f5eb 100644 --- a/templates/home.html +++ b/templates/home.html @@ -4,7 +4,8 @@ {% block css_files %}{% endblock %} {% block content%} -{% if user.is_authenticated %} Hi {{ user.username }}! +{% if user.is_authenticated %} +Hi {{ user.username }}!

Log Out

{% else %} diff --git a/templates/index.html b/templates/index.html index 5b152d9..81327c2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,6 +1,5 @@ -{% extends "base.html" %} +{% extends 'base.html' %} {% load static %} - -{% block content %} +{% block title %}Home{% endblock %} +{% block css_files %}{% endblock %} +{% block content%} + +{% if user.is_authenticated %} +

Hi {{ user.username }}!

+ +

Log Out

+{% else %} +

You are not logged in

+Log In +
+Don't have an account? Click here to create one! +{% endif %} +

-

{{ request.user.display_name }}!

- +{%if avatar.url %} + +{%else%} + +{%endif%} -

A member since: {{ request.user.joined_date }}

-

Motofications: {{ pings.count }}


{% for post_item in post_items %} -
+ + + {% endfor %}{% endblock %} {% comment %} @@ -85,3 +101,4 @@

Notifications: {{ pings.count }}

{% endblock %} {% endcomment %} + diff --git a/templates/post_detail.html b/templates/post_detail.html new file mode 100644 index 0000000..aa168e6 --- /dev/null +++ b/templates/post_detail.html @@ -0,0 +1,2 @@ + +

{{post.caption}}

\ No newline at end of file diff --git a/templates/profile.html b/templates/profile.html index 4f010c2..21707d8 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -6,12 +6,24 @@
- + {% if avatar.url %} + + {%else%} + + {%endif%}
@@ -23,7 +35,7 @@
-

Member since: {{ request.user.joined_date }}

+

{{profile.bio}} 🏕️ @@ -36,30 +48,22 @@

Member since: {{ request.user.joined_date }}

I Ride Like a {{profile.riding_level}}
- - {% comment %} {% if profile.username == request.user.username %} - # Commenting out following, unfollowing and follow while refactoring profile.html - Danielle 7/20 - {% elif user.is_authenticated %} - - Follow {{profile.display_name}} - Unfollow {{profile.display_name}} - {%else%} - Login to Follow {{profile.username}} - {%endif%} {% endcomment %}
+
- + {% if profile.username == request.user.username %} +
Saved Posts
+
My Posts
- + {%endif%} {% endfor %}