금요일 과제 끝나는 날

금요일 과제 끝나는 날

·

3 min read

오늘 ERD 마무리랑 readme 수정 및 코드를 작성함 마무리 하는 날

홈화면(views.py)
from django.shortcuts import render, get_object_or_404,redirect
from django.http import HttpResponse
from products.forms import ProductForm
from products.models import Product
from django.views.decorators.http import require_POST
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.contrib.auth.models import User

def list_view(request):
    products = Product.objects.all()
    return render(request, "products/list.html", {"products": products})

@login_required
def create_view(request):
    if request.method == "POST":
        form = ProductForm(request.POST, request.FILES)  
        if form.is_valid():
            product = form.save(commit=False)
            product.author = request.user  
            product.save()
            return redirect("products:list")
    else:
        form = ProductForm()
    return render(request, "products/create.html", {'form': form})

def detail_view(request,product_id):
    product = get_object_or_404(Product, pk=product_id)
    return render(request, "products/detail.html", {"product": product})

@login_required
def update_view(request, product_id):
    product = get_object_or_404(Product, pk=product_id)


    if product.author != request.user:
        return redirect("products:detail", product_id=product_id)

    if request.method == "POST":
        form = ProductForm(request.POST, request.FILES, instance=product)
        if form.is_valid():
            updated_product = form.save(commit=False)  
            updated_product.author = request.user      
            updated_product.save()               
            return redirect("products:list")
    else:
        form = ProductForm(instance=product)

    return render(request, "products/create.html", {"form": form})


@login_required
@require_POST
def delete_view(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    if product.author != request.user:
        messages.warning(request,"작성자 본인만 수정")
        return redirect("products:detail", product_id=product_id)
    product.delete()
    return redirect("products:list")


@login_required
@require_POST
def choose_view(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    user: User = request.user
    if user.choose_products.filter(id=product_id).exists():
        user.choose_products.remove(product)
    else:
        user.choose_products.add(product)
    return redirect('products:list')

def upload_image(request):
    if request.method == 'POST':
        form = ProductForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('some_view')
    else:
        form = ProductForm()
    return render(request, 'upload_image.html', {'form': form})

urls.py

urls.py
from django.urls import path
from products import views
from django.conf import settings
from django.conf.urls.static import static
from .views import create_view, update_view


app_name = 'products'


urlpatterns =[
    path("", views.list_view, name="list"),
    path("<int:product_id>", views.detail_view, name="detail"),
    path("create/", views.create_view, name="create"),
    path("update/<int:product_id>", views.update_view, name="update"),
    path("delete/<int:product_id>", views.delete_view, name="delete"),
    path("choose/<int:product_id>", views.choose_view, name='choose'),
    path('product/new/', create_view, name='product_new'),
    path('product/<int:pk>/edit/', update_view, name='product_edit'),
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

product(제품)로그인시 회원 조회 게시글 조회 및 찜하기 가능
게시글 작성/ 수정 / 삭제 가능

게시글 조회시 찜하기 기능 / 수정 누르면 로그인 창으로 이동
로그인 안할시 글 작성 누를시 로그인 창으로 이동
글 작성 이미지 첨가 할때 홈에서 이미지 보이게 함

accounts(계정)

views.py

 from django.shortcuts import render, redirect, get_object_or_404,redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.views.decorators.http import require_POST
from django.contrib.auth.forms import UserCreationForm
from .forms import RegisterForm
from accounts.models import User
from django.contrib.auth.decorators import login_required


def login_view(request):
    if request.method == 'POST':
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect(request.GET.get('next') or 'products:list')
        messages.error(request,'이게 맞을까요?')
    return render(request,'accounts/login.html')

@require_POST
def logout_view(request):
    logout(request)
    return redirect("products:list")



def signup_view(request):
    form = RegisterForm()

    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('products:list')

    context = {
        'form':form,
    }
    return render(request,'accounts/signup.html', context)

def profile_view(request, user_id):
    user = get_object_or_404(User, id=user_id)
    return render(request, 'accounts/profile.html', {'profile_user': user})

@login_required
@require_POST
def follow_view(request, user_id):
    user = get_object_or_404(User, id=user_id)
    if user.followers.filter(id=request.user.id).exists():
        user.followers.remove(request.user)
    else:
        user.followers.add(request.user)
    return redirect('accounts:profile', user_id=user_id)

urls.py

from django.urls import path
from accounts import views

app_name = "accounts"

urlpatterns =[
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
    path('signup/', views.signup_view, name='signup'),
    path('profile/<int:user_id>', views.profile_view, name='profile'),
    path('follow/<int:user_id>', views.follow_view, name='follow'),
]

이제 보면 익숙해지기는 하는데 계속 사용하다보면 적응해져서 이거 보다 더 쉽게
할 수 있을거 같다