_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

woncoding/TIL

TIL | 10.6.목 [Django Project]

2022. 10. 6. 21:16

- Python Project  |  VSCode 기준

 

1. FEELSNS 최종 파일 구조

 

[프로젝트 구조]

  • feelsns
  • users
    • templates
      • fileupload.html
      • login_page.html
      • make_user.html
      • profile_page.html
    • modes.py
    • urls.py
    • views.py

[users/models]

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings


class UserModel(AbstractUser):

    class Meta:
        db_table = "user"
   
    nickname = models.TextField(max_length=16, null=True, default='')
    bio = models.CharField(max_length=500, blank=True, null=True)
    user_images = models.ImageField(null=True, upload_to="images", blank=True)
    follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee')

 

[users/urls]

from django.urls import path
from users import views


app_name = 'users'
urlpatterns = [
    path('', views.home, name='home'),
    path('login_page/', views.login_view, name='login_page'),
    path('make_user/', views.make_user, name='make_user'),
    path('logout/', views.logout, name='logout'),
    path('profile_page/', views.user_view, name='profile_page'),
    path('user/follow/<int:id>/', views.user_follow, name='user-follow'),
    path('fileupload/', views.fileUpload, name='fileupload'),
]

 

[users/views]

from turtle import onclick
from django.shortcuts import render, redirect
from .models import UserModel
from django.contrib.auth import get_user_model
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from .forms import FileUploadForm

def home(request):
    user = request.user.is_authenticated
    if user:
        return redirect('/main_page')
    else:
        return redirect('/login_page')

def profile_page(request):
    return render(request, 'profile_page.html')


def make_user(request):
    if request.method == 'GET':
        user = request.user.is_authenticated
        if user:
            return redirect('/')
        else:
            return render(request, 'make_user.html')
    elif request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        password2 = request.POST.get('password2', '')
        nickname = request.POST.get('nickname', '')
        
        if password != password2:
            return render(request, 'make_user.html', {'error': '패스워드를 확인 해 주세요!'})
        else:
            if username == '' or password == '':
                return render(request, 'make_user.html', {'error': '사용자 이름과 비밀번호는 필수 값 입니다!'})
            exist_user = UserModel.objects.filter(username=username)
            if exist_user:
                return render(request, 'make_user.html', {'error': '사용자가 존재합니다'})
            else:
                UserModel.objects.create_user(username=username, password=password, nickname=nickname)
                return redirect('/login_page')


def login_view(request):
    if request.method == 'POST':
        
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        me = auth.authenticate(request, username=username, password=password)
        # me = UserModel.object.get(username=username, password=password)
        if me is not None:
            auth.login(request, me)
            return redirect('/') # 글쓰기 페이지
        else:
            return render(request, 'login_page.html',{'error':'유저이름 혹은 패스워드를 확인 해 주세요'})
    elif request.method == 'GET':
        user = request.user.is_authenticated  # 사용자가 로그인 되어 있는지 검사
        if user:  # 로그인이 되어 있다면
            return redirect('/')
        else:  # 로그인이 되어 있지 않다면
            return render(request, 'login_page.html')


@login_required
def logout(request):
    auth.logout(request)
    return redirect('/login_page')


@login_required
def user_view(request):
    if request.method == 'GET':
        # 사용자를 불러오기, exclude와 request.user.username 를 사용해서 '로그인 한 사용자'를 제외하기
        user_list = UserModel.objects.all().exclude(username=request.user.username)
        return render(request, 'profile_page.html', {'user_list': user_list, 'user': request.user})


@login_required
def user_follow(request, id):
    me = request.user
    click_user = UserModel.objects.get(id=id)
    if me in click_user.followee.all():
        click_user.followee.remove(request.user)
    else:
        click_user.followee.add(request.user)
    return redirect('/profile_page')


def fileUpload(request):
    if request.method == 'POST':
        nickname = request.POST['nickname']
        bio = request.POST['bio']
        img = request.FILES["user_images"]
        user = request.user

        user.nickname = nickname
        user.bio = bio
        user.user_images = img
        user.save()
        return redirect('/profile_page')
    else:
        fileuploadForm = FileUploadForm
        context = {
            'fileuploadForm': fileuploadForm,
        }
        return render(request, 'fileupload.html', context)

 

 

 


 

 

 

  • post
    • templates
      • base.html
      • detailed_post.html
      • edit_post.html
      • main_page.html
      • make_post.html
    • modes.py
    • urls.py
    • views.py

 

[post/models]

from django.db import models
from users.models import UserModel


class Post(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    body = models.TextField()
    nickname = models.ForeignKey(UserModel, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

class Comment(models.Model):

    class Meta:
        db_table = "Comment"

    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    nickname = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    comment = models.TextField(max_length=3000, null=False, default='')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.comment

 

 

[post/urls]

from django.urls import path
from post import views


app_name = 'post'
urlpatterns = [
    path('main_page/', views.main_page, name='main_page'),
    path('detailed_post/<int:post_id>', views.detailed_post, name='detailed_post'),
    path('make_post/', views.make_post, name='make_post'),
    path('create_post', views.create_post, name='create_post'),
    path('detailed_post/<int:post_id>/edit_post', views.edit_post, name='edit_post'),
    path('detailed_post/<int:post_id>/delete_post', views.delete_post, name='delete_post'),
    path('detailed_post/<int:post_id>/comment/', views.write_comment, name='write_comment'),
    path('detailed_post/comment/delete', views.delete_comment, name='delete_comment'),    
]

 

 

[post/views]

from django.shortcuts import render, get_object_or_404
from .models import Post, Comment
from django.utils import timezone
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import Postedit, CommentForm
from django.views.generic import ListView, TemplateView


def main_page(request):
    posts = Post.objects.order_by('-id')
    return render(request, 'main_page.html', {'posts':posts})


@login_required
def make_post(request):
    return render(request, 'make_post.html')

@login_required
def create_post(request):
    user = request.user
    post = Post()
    post.title = request.POST.get('title')
    post.body = request.POST.get('body')
    post.pub_date = timezone.datetime.now()
    post.nickname = user
    post.save()
    return redirect('/detailed_post/' + str(post.id))


@login_required
def detailed_post(request, post_id):
    post_detail = get_object_or_404(Post, pk=post_id)
    write_comment = Comment.objects.filter(post_id=post_id).order_by('-created_at')
    return render(request, 'detailed_post.html', {'post': post_detail, 'comment': write_comment})

@login_required
def new_post(request):
    full_text = request.GET['fulltext']

    word_list = full_text.split()

    word_dictionary = {}

    for word in word_list:
        if word in word_dictionary:
            # Increase
            word_dictionary[word] += 1
        else:
            # add to the dictionary
            word_dictionary[word] = 1

    return render(request, 'make_post.html', {'fulltext': full_text, 'total': len(word_list), 'dictionary': word_dictionary.items()} )

@login_required
def edit_post(request, post_id):
    post = Post.objects.get(id=post_id)

    if request.method =='POST':
        form = Postedit(request.POST)
        if form.is_valid():
            user = request.user
            post.title = form.cleaned_data['title']
            post.body = form.cleaned_data['body']
            post.pub_date=timezone.now()
            post.nickname = user
            post.save()
            return redirect('/detailed_post/' + str(post.id))
    else:
        form = Postedit(instance = post)
 
        return render(request,'edit_post.html', {'form':form})

@login_required
def delete_post(request, post_id):
    post = Post.objects.get(id=post_id)
    post.delete()
    return redirect('/')

def write_comment(request, post_id):
    if request.method == 'POST':
        comment = request.POST.get('comment','')
        current_post = Post.objects.get(id=post_id)

        C = Comment()
        C.comment = comment
        C.nickname = request.user
        C.post = current_post
        C.save()

        return redirect('/detailed_post/'+str(post_id))

@login_required
def delete_comment(request, post_id):
    comment = Comment.objects.get(id=post_id)
    comment.delete()
    return redirect('/detailed_post/'+str(post_id))

 

 

 

 


 

 

 

 

2. git 협업

  • 가상환경 제거 및 리드미 상세하게하기
 

GitHub - wonprogrammer/FEELSNS: A5 | 2_team_project

A5 | 2_team_project. Contribute to wonprogrammer/FEELSNS development by creating an account on GitHub.

github.com

 

 

  • git branch 작업
    1. git branch 브랜치 명
    2. git checkout 브랜치 명
    3. git add . / git commit -m ‘커밋 메세지’ / git push origin 브랜치 명
    4. git에서 집접 pull request
    5. (git checkout main)
    6. (git pull origin main)   /   git pull main branch link
저작자표시 비영리 변경금지 (새창열림)

'woncoding > TIL' 카테고리의 다른 글

TIL | 10.11.화 [Django🐢]  (0) 2022.10.11
TIL | 10.7.금 [머신러닝]  (1) 2022.10.11
TIL | 10.5.수 [Django Project]  (0) 2022.10.06
TIL | 10.4.화 [Django Project]  (0) 2022.10.05
TIL | 9.29.목 [Django 기초🐢]  (0) 2022.09.30
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 10.11.화 [Django🐢]
    • TIL | 10.7.금 [머신러닝]
    • TIL | 10.5.수 [Django Project]
    • TIL | 10.4.화 [Django Project]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바