오늘 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
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(계정)
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)
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'),
]
이제 보면 익숙해지기는 하는데 계속 사용하다보면 적응해져서 이거 보다 더 쉽게
할 수 있을거 같다