'Django' 카테고리의 다른 글
스파르타 장고. 잘 못하는 것들. (0) | 2023.04.13 |
---|---|
장고 정리: 5주 (0) | 2023.04.12 |
파이썬 장고 실무 기초: 4 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 3 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 2 (0) | 2023.04.04 |
스파르타 장고. 잘 못하는 것들. (0) | 2023.04.13 |
---|---|
장고 정리: 5주 (0) | 2023.04.12 |
파이썬 장고 실무 기초: 4 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 3 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 2 (0) | 2023.04.04 |
4월 3일 - 연봉 1억 대기업 개발자 되는 법 특강을 들었다. 내가 느낀 바로는 공부를 잘하는 사람이 코딩을 잘한다 라는 뜻으로 느껴졌다. 예전에 완벽한 공부법 이라는 책을 읽으면서 메타인지에 대해 이미 알고 있었다. 그 얘기가 주 내용이었다.
하지만 조직의 메타인지도 있다는 것은 새로웠다. 이것은 조직이 무엇을 하고 무엇이 필요한지 알고 있는 것을 말한다.
4월 4일 - 알고리즘도 풀고 장고 실무도 했구나. 알고리즘은 정말 재밌다. 막막했지만 수학 할 때 처럼 일단 잘 모르겠으면 답을 보고 이해하고 다음 문제 풀면서 쉬운 문제들을 풀었다. 실력이 좀 쌓이고 어려운 문제를 풀 때 오랜 시간 고민하는 것이 의미가 있다. 수학처럼. 그리고 장고! 쉬운 듯 어려운 장고! 2주차까지 들었구나! 1주차는 파이썬 기초 하고 2주차 부터 본 강의 내용인데 그저 강의를 따라했기 때문일까 뭘 했는지 기억이 나질 않는다.
4월 5일 - 장고 4주차까지 했네! 그리고 개인과제 발제. 엄청 어려웠다. 그저 막막했다.
4월 6일 - 이때 부터 멘붕이 왔다...
4월 7일 - 장고를 하고 있는지 강의를 따라하는건지 전혀 모르는 상황이 되었다....
문제점은 주말에 여자친구를 만나고 깨달았다. 부트캠프를 하면서 여자친구와 2주만에 만났다. 정말 보고 싶었다.
여자친구는 우리의 미래를 위해 '현실'에 살면서 노력하고 있었다.
나는 '현실'에 살았었나? 집에서 그저 강의와 커리큘럼에 따라가기 바빴다.
하지만 생각해보니 내가 장고나 파이썬으로 프로그래밍을 잘한다면 커리큘럼도 잘 따라갈 것이라 생각이 들었다.
그저 강의를 보면서 따라하는게 아닌 '현실'의 프로그래밍을 위해 노력해야 한다는걸 깨달았다.
과감히 개인 과제는 포기하기로 했다. 그리고 점프 투 장고를 보면서 장고의 이해도를 높이기로 생각을 했다.
우리의 미래를 위해 시간을 쪼개고 쪼개서 밀도있게 이용하기로 마음먹었다.
WIL 6주차 : DRF 시작함. (0) | 2023.04.23 |
---|---|
[5주차] WIL : 불안하다... (0) | 2023.04.16 |
[3주차] WIL: 3주차인가... 벌써?.. (0) | 2023.04.02 |
[2주차] WIL : 파이썬만 계속 공부한 2주차. (0) | 2023.03.24 |
[1주차] WIL : 첫 프로젝트인 팀원 소개 하기 끝~ (0) | 2023.03.17 |
장고 프로젝트를 만들면 루트 패키지가 되어지고,
프로젝트 내에 만드는 앱들은 서브 패키지가 된다.
url을 만든다.
함수로
view와 연결해서 어떤 서비스를 해줄지 작성한다.
데이터를 저장해야 한다면 Model을 작성해서 틀을 정한다.
그리고 DB에 저장하고 클라이언트에게 화면을 보여준다.
이런 식으로 사용하는 것들은 모두 앱이다. setting에 적어서 사용해야한다.
그리고 manage.py migrate로 알려줘야한다.
장고에 app을 만들 수 있다. 그리고 당연히 setting에 적어줘야한다.
[43일차] TIL : 개인 과제 시작 (0) | 2023.04.24 |
---|---|
[20일차] TIL : 공부법 특강! 그리고 장고~ (0) | 2023.04.10 |
[18일차] TIL : 오늘 뭘 했나... (0) | 2023.04.06 |
[17일차] TIL : 장고 1주차 2주차 (0) | 2023.04.05 |
[16일차] TIL : TIL / WIL을 잘 쓰도록 하자! , 처음 장고 시작! (0) | 2023.04.03 |
[20일차] TIL : 공부법 특강! 그리고 장고~ (0) | 2023.04.10 |
---|---|
TIL: 19일째. 내가 장고를 하고 있는건가?.. (0) | 2023.04.07 |
[17일차] TIL : 장고 1주차 2주차 (0) | 2023.04.05 |
[16일차] TIL : TIL / WIL을 잘 쓰도록 하자! , 처음 장고 시작! (0) | 2023.04.03 |
파이썬 개인과제 해설 정리. (0) | 2023.04.01 |
django-admin startapp restaurant
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tweet',
'user',
'restaurant', #요기
# restaurant/models.py
from django.db import models
# Create your models here.
class MyTopping(models.Model):
class Meta:
db_table = "my_topping"
def __str__(self):
return self.topping_name
topping_name = models.CharField(max_length=100)
class MyPizza(models.Model):
class Meta:
db_table = "my_pizza"
def __str__(self):
return self.pizza_name
pizza_name = models.CharField(max_length=100)
pizza_topping = models.ManyToManyField(MyTopping)
python manage.py makemigrations
python manage.py migrate
from django.contrib import admin
from .models import MyTopping, MyPizza
# Register your models here.
admin.site.register(MyPizza)
admin.site.register(MyTopping)
python manage.py createsuperuser
python manage.py makemigrations
python manage.py migrate
python manage.py shell
>>> from restaurant.models import MyTopping, MyPizza
#전체 피자
>>> MyPizza.objects.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
# 피자를 하나씩 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노')
<MyPizza: 도미노>
>>> MyPizza.objects.get(pizza_name='피자헛')
<MyPizza: 피자헛>
>>> MyPizza.objects.get(pizza_name='파파존스')
<MyPizza: 파파존스>
# 각 피자의 토핑들을 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 치킨>]>
>>> MyPizza.objects.get(pizza_name='피자헛').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 올리브>]>
>>> MyPizza.objects.get(pizza_name='파파존스').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 피망>]>
>>> from restaurant.models import MyTopping, MyPizza
#전체 토핑
>>> MyTopping.objects.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 올리브>, <MyTopping: 치킨>, <MyTopping: 피망>]>
#각 토핑별로 출력
>>> MyTopping.objects.get(topping_name='치즈')
<MyTopping: 치즈>
>>> MyTopping.objects.get(topping_name='페퍼로니')
<MyTopping: 페퍼로니>
>>> MyTopping.objects.get(topping_name='올리브')
<MyTopping: 올리브>
>>> MyTopping.objects.get(topping_name='치킨')
<MyTopping: 치킨>
>>> MyTopping.objects.get(topping_name='피망')
<MyTopping: 피망>
# 각 토핑이 들어있는 피자를 불러오기
>>> MyTopping.objects.get(topping_name='치즈').mypizza_set.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
>>> MyTopping.objects.get(topping_name='페퍼로니').mypizza_set.all()
<QuerySet [<MyPizza: 피자헛>, <MyPizza: 파파존스>]>
>>> MyTopping.objects.get(topping_name='올리브').mypizza_set.all()
<QuerySet [<MyPizza: 피자헛>]>
>>> MyTopping.objects.get(topping_name='치킨').mypizza_set.all()
<QuerySet [<MyPizza: 도미노>]>
>>> MyTopping.objects.get(topping_name='피망').mypizza_set.all()
<QuerySet [<MyPizza: 파파존스>]>
# user/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings
# Create your models here.
class UserModel(AbstractUser):
class Meta:
db_table = "my_user"
bio = models.TextField(max_length=500, blank=True)
follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee')
python manage.py makemigrations
python manage.py migrate
# user/views.py
@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, 'user/user_list.html', {'user_list': user_list})
@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('/user')
path('user/', views.user_view, name='user-list'),
path('user/follow/<int:id>',views.user_follow, name='user-follow')
장고 정리: 5주 (0) | 2023.04.12 |
---|---|
무신사 ERD (0) | 2023.04.09 |
파이썬 장고 실무 기초: 3 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 2 (0) | 2023.04.04 |
파이썬 장고 실무 기초: 1 (0) | 2023.04.03 |
from django.db import models
from django.contrib.auth.models import AbstractUser # 이 줄 추가!
# Create your models here.
class UserModel(AbstractUser): #상속시켜줘야함!
class Meta:
db_table = "my_user" # 여기는 테이블 이름이에요! 꼭 기억 해 주세요!
bio = models.TextField(max_length=500, blank=True) #필요한 테이블만 남기고 나머지는 삭제.
AUTH_USER_MODEL = 'user.UserModel'
python manage.py makemigrations
python manage.py migrate
# user/views.py
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수
# user/views.py
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
else:
UserModel.objects.create_user(username=username, password=password, bio=bio) #이렇게 한 줄로 바뀌었다.
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
# user/views.py
from django.contrib import auth # 사용자 auth 기능
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)
return HttpResponse("로그인 성공")
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
return render(request, 'user/signin.html')
# tweet/views.py
from django.shortcuts import render, redirect
# Create your views here.
def home(request):
user = request.user.is_authenticated # 사용자가 인증을 받았는지 (로그인이 되어있는지)
if user:
return redirect('/tweet')
else:
return redirect('/sign-in')
def tweet(request):
if request.method == 'GET':
return render(request, 'tweet/home.html')
# tweet/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 127.0.0.1:8000 과 views.py 폴더의 home 함수 연결
path('tweet/', views.tweet, name='tweet') # 127.0.0.1:8000/tweet 과 views.py 폴더의 tweet 함수 연결
]
# mySpartaSns/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('user.urls')),
path('', include('tweet.urls'))
]
#user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)
return redirect('/') # 여기 수정!!!!
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
return render(request, 'user/signin.html')
<div class="col-md-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ user.username }}</h5>
<p class="card-text"> {{ user.bio }}</p>
</div>
</div>
</div>
<!-- templates/base.html -->
... 생략
<li class="nav-item">
<a class="nav-link" href="#"> 친구 <span class="sr-only"></span></a>
</li>
</ul>
</div>
<form class="form-inline my-2 my-lg-0">
{% if not user.is_authenticated %} # 요줄 중요!
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
</li>
</ul>
{% else %} #요줄 중요!
{{ user.username }} 님 반갑습니다!
{% endif %} # 요줄은 if 문이 끝났다는 걸 알려주는 것 같다!
</form>
... 생략
# tweet/views.py
from django.shortcuts import render, redirect
def tweet(request):
if request.method == 'GET': # 요청하는 방식이 GET 방식인지 확인하기
user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기
if user: # 로그인 한 사용자라면
return render(request, 'tweet/home.html')
else: # 로그인이 되어 있지 않다면
return redirect('/sign-in')
# user/views.py
def sign_up_view(request):
if request.method == 'GET':
user = request.user.is_authenticated # 로그인 된 사용자가 요청하는지 검사
if user: # 로그인이 되어있다면
return redirect('/')
else: # 로그인이 되어있지 않다면
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
else:
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)
return redirect('/')
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
user = request.user.is_authenticated # 사용자가 로그인 되어 있는지 검사
if user: # 로그인이 되어 있다면
return redirect('/')
else: # 로그인이 되어 있지 않다면
return render(request, 'user/signin.html')
#user/views.py
from django.contrib.auth.decorators import login_required
@login_required
def logout(request):
auth.logout(request) # 인증 되어있는 정보를 없애기
return redirect("/")
# user/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
path('logout/', views.logout, name='logout')
]
<!-- templates/base.html -->
... 생략
<li class="nav-item">
<a class="nav-link" href="#"> 친구 <span class="sr-only"></span></a>
</li>
</ul>
</div>
<form class="form-inline my-2 my-lg-0">
{% if not user.is_authenticated %}
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
</li>
</ul>
{% else %}
<ul class="navbar-nav mr-auto">
<li class="nav-item" disabled>
<span class="nav-link">
{{ user.username }} 님 반갑습니다!
</span>
</li>
<li class="nav-item">
<a class="nav-link" href="/logout"> 로그아웃 </a>
</li>
</ul>
{% endif %}
</form>
... 생략
... 생략
<form action="/tweet/" method="post">
{% csrf_token %}
<div class="form-group mb-2">
<textarea class="form-control" style="resize: none" name='my-content' id="my-content"></textarea>
</div>
<button type="submit" class="btn btn-primary" style="float:right;">작성하기</button>
</form>
... 생략
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('tweet/', views.tweet, name='tweet')
]
from .models import TweetModel # 글쓰기 모델 -> 가장 윗부분에 적어주세요!
def tweet(request):
if request.method == 'GET': # 요청하는 방식이 GET 방식인지 확인하기
user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기
if user: # 로그인 한 사용자라면
return render(request, 'tweet/home.html')
else: # 로그인이 되어 있지 않다면
return redirect('/sign-in')
elif request.method == 'POST': # 요청 방식이 POST 일때
user = request.user # 현재 로그인 한 사용자를 불러오기
my_tweet = TweetModel() # 글쓰기 모델 가져오기
my_tweet.author = user # 모델에 사용자 저장
my_tweet.content = request.POST.get('my-content', '') # 모델에 글 저장
my_tweet.save()
return redirect('/tweet')
# tweet/views.py
def tweet(request):
if request.method == 'GET': # 요청하는 방식이 GET 방식인지 확인하기
user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기
if user: # 로그인 한 사용자라면
all_tweet = TweetModel.objects.all().order_by('-created_at') # 여기랑
return render(request, 'tweet/home.html', {'tweet': all_tweet}) # 여기가 중요.
else: # 로그인이 되어 있지 않다면
return redirect('/sign-in')
elif request.method == 'POST': # 요청 방식이 POST 일때
user = request.user # 현재 로그인 한 사용자를 불러오기
my_tweet = TweetModel() # 글쓰기 모델 가져오기
my_tweet.author = user # 모델에 사용자 저장
my_tweet.content = request.POST.get('my-content', '') # 모델에 글 저장
my_tweet.save()
return redirect('/tweet')
<!-- templates/tweet/home.html -->
<hr>
<!-- 작성 된 글이 나오는 곳 -->
<div class="row">
{% for tw in tweet %}
<div class="col-md-12 mb-2">
<div class="card">
<div class="card-body">
<div class="media">
<div class="media-body">
<h5 class="mt-0">{{ tw.content }}</h5>
</div>
<div style="text-align: right">
<span style="font-size: small">{{ tw.author.username }}-{{ tw.created_at|timesince }} 전</span>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
# tweet/views.py
from django.contrib.auth.decorators import login_required
@login_required
def delete_tweet(request, id):
my_tweet = TweetModel.objects.get(id=id)
my_tweet.delete()
return redirect('/tweet')
# tweet/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('tweet/', views.tweet, name='tweet'),
path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
]
<!-- templates/tweet/home.html -->
... 생략
<!-- 작성 된 글이 나오는 곳 -->
<div class="row">
{% for tw in tweet %}
<div class="col-md-12 mb-2">
<div class="card">
<div class="card-body">
{% if tw.author == user %}
<div style="text-align: right">
<a href="/tweet/delete/{{ tw.id }}">
<span class="badge rounded-pill bg-danger">삭제</span>
</a>
</div>
{% endif %}
<div style="text-align: right">
<a href="#">
<span class="badge rounded-pill bg-success">보기</span>
</a>
</div>
<div class="media">
<div class="media-body">
<h5 class="mt-0">{{ tw.content }}</h5>
</div>
<div style="text-align: right">
<span style="font-size: small">{{ tw.author.username }}-{{ tw.created_at|timesince }} 전</span>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
... 생략
장고 정리: 5주 (0) | 2023.04.12 |
---|---|
무신사 ERD (0) | 2023.04.09 |
파이썬 장고 실무 기초: 4 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 2 (0) | 2023.04.04 |
파이썬 장고 실무 기초: 1 (0) | 2023.04.03 |
urls에서는 url 설정과 설정한 url에서 보여줄 html을 연결할 수 있다.
view에서는 url에서 연결한 html을 리턴하도록 함수를 선언할 수 있다.
post방식으로 회원가입이나 로그인 시의 데이터가 들어오는 것도 view에서 받는다.
모델은 회원가입시 어떤 정보들을 저장할지 정한 형식이다.
터미널에 입력하면 각각의 이름으로 기능을 추가 할 수 있도록 폴더와 파일이 만들어진다.
각 앱에서 사용할 모델들을 만들고 장고에 알려줘야 한다.
python manage.py makemigrations
그리고 데이터베이스에 반영!
python manage.py migrate
html에서 입력하는 요소들이 post방식으로 전해져 db에 저장할 수 있도록
보안,설정들을 해주고...
post로 온 각각의 데이터를 저장 할 수 있도록 설정을 해줘야한다.
filter(username=username) 으로 모델에 있는 아이디가 같은 값을 찾아오면 된다.
입력한 아이디와 비밀번호를 post로 받아와서...
아이디, 비밀번호를 검증하고 세션에 저장해주면 된다.
TIL: 19일째. 내가 장고를 하고 있는건가?.. (0) | 2023.04.07 |
---|---|
[18일차] TIL : 오늘 뭘 했나... (0) | 2023.04.06 |
[16일차] TIL : TIL / WIL을 잘 쓰도록 하자! , 처음 장고 시작! (0) | 2023.04.03 |
파이썬 개인과제 해설 정리. (0) | 2023.04.01 |
TIL super() , return (0) | 2023.03.29 |
django-admin startapp user #사용자 관리 담당할 user
django-admin startapp tweet #글 관리 담당할 tweet
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tweet', #
'user', # 두개 추가!
]
#user/models.py
from django.db import models
# Create your models here.
class UserModel(models.Model):
class Meta:
db_table = "my_user"
username = models.CharField(max_length=20, null=False)
password = models.CharField(max_length=256, null=False)
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
from django.contrib import admin
from .models import UserModel
# Register your models here.
admin.site.register(UserModel) # 이 코드가 나의 UserModel을 Admin에 추가 해 줍니다
# tweet/models.py
from django.db import models
from user.models import UserModel
# Create your models here.
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
#ForeignKey는 '외부 모델을 가져와서 사용하겠다.' 라는 얘기
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
데이터 베이스에 알려주고 적용하기
from django.contrib import admin
from .models import TweetModel
# Register your models here.
admin.site.register(TweetModel)
# mySpartaSns/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('user.urls')) #user앱의 urls.py에 연결시키겠다! 라고 선언 해 주는 코드
]
from django.shortcuts import render
# Create your views here.
def sign_up_view(request):
return render(request, 'user/signup.html')
def sign_in_view(request):
return render(request, 'user/signin.html')
from django.urls import path
from . import views
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
]
def sign_up_view(request):
if request.method == 'GET': # GET 메서드로 요청이 들어 올 경우
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST 메서드로 요청이 들어 올 경우
return ""
<!-- 윗 부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
from django.shortcuts import render, redirect
from .models import UserModel
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
new_user = UserModel() #나는 괄호를 빼먹어서 에러가 났다. 조심하자.
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
return redirect('/sign-in')
# user/views.py
from django.http import HttpResponse
def sign_in_view(request):
if request.method == 'POST':
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
<!-- 윗부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 로그인</h2>
<form class="form-area" action="/sign-in/" method="post">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse("로그인 성공!")
else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')
filter(조건 함수, 순회 가능한 데이터)
filter() 함수는 두번째 인자로 넘어온 데이터 중에서 첫번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환합니다.
return HttpResponse(f"안녕하세요{username}님. 로그인 되었습니다.")
장고 정리: 5주 (0) | 2023.04.12 |
---|---|
무신사 ERD (0) | 2023.04.09 |
파이썬 장고 실무 기초: 4 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 3 (0) | 2023.04.05 |
파이썬 장고 실무 기초: 1 (0) | 2023.04.03 |
매일 공부한 내용 정리한 걸 TIL로 제출했는데 이제는 TIL에 한번 더 정리해서 한번 더 복습을 하도록 하자.
그리고 오늘 처음 장고를 시작했는데, 첫째주만 공부해서 그냥 장고가 어떤 것이다 정도만 이해했다.
장고는 플라스크랑 다르게 많은 기능이 이미 구현되어있어서 그걸 이용해서 웹 페이지를 만들 수 있는 아주 좋은 웹 프레임워크라는 것.
그리고 장고 실행시 인코딩 오류가 났는데 설정에서 콘솔 인코딩과 파일 인코딩을 UTF-8로 바꾸어주면 에러를 해결 할 수 있다.
대괄호를 통해 딕셔너리 키 값을 인덱싱해서 밸류를 가져오는 경우와
get으로 가져오는 경우는 전자는 키 값이 없을 때 에러가 나지만 후자는 None을 출력한다는 것.
그리고 현직 개발자분의 특강도 있었다.
관한 내용은 특강에 글을 남겼다.
중요한것은 메타인지와 본인의 성장이었다.
가장 나에게 필요했던 것은 악에 받친 감정으로 뭐든지 해내고 말겠다는 마음이 가장 필요하지 않나..
[18일차] TIL : 오늘 뭘 했나... (0) | 2023.04.06 |
---|---|
[17일차] TIL : 장고 1주차 2주차 (0) | 2023.04.05 |
파이썬 개인과제 해설 정리. (0) | 2023.04.01 |
TIL super() , return (0) | 2023.03.29 |
[5일차] TIL : TIL 작성 잘 해야 크게 간다! (0) | 2023.03.17 |
좋은 개발자의 비밀 (0) | 2023.03.20 |
---|