0923 TIL

loooggi·3일 전
0

장고 기초 2주차 🦖

  • 장고 서버 시작: 플레이버튼 ▶️
  • 장고 서버 중지: 빨간 네모버튼 🟥
  • app: 구현할 기능 단위로 나눠서 생성
    ->user(사용자 정보),tweet(글)을 만들고 나면

    $ django-admin startapp user
    $ django-admin startapp tweet

settings.py의 installed apps에 추가해준다

  • ORM: db를 하나의 객체로 보고 class를 이용해서 db를 관리할 수 있도록 함

  • user> models.py

    -> user 앱에 어떤 정보가 들어갈지 종류와 형식을 지정

  • 모델 만든 후에 db에 넣기

    python3 manage.py makemigrations
    ->데이터 베이스에 변경사항이 있음을 알려줌
    python manage.py migrate
    ->데이터베이스의 변경사항을 반영해줌

->위 사진 오른쪽 db에서 변경사항 확인 가능


관리자만들기:
python manage.py createsuperuser

usermodel 추가하기
admin.site.register(UserModel)


  • user>signup.html

    < form >태그 안에 method와 action을 적어준다
<form class="form-area" method ='post' action="/sign-up/">
            {# form: 화면의 데이터를 서버로 전송할때 사용하는 태그 #}
            {# method: 읽어오고 싶을 땐 get/주고싶을 땐 post -> 회원가입은 정보를 서버에 전달하니까 post #}
            {# action: 어디 url로 저장할건지 #}

그 아래

{% csrf_token %}
{# 포스트시에 보안기능 추가 #}

그 아래 기능들 추가하고(id,passward,bio..)

회원가입 버튼 추가

<button type="submit" class="btn btn-primary">회원가입</button>
{# form 안에 있으면 해당 form 실행 -sign-up이라는 url로 post 방식으로 데이터를 보내주는 버튼 #}
  • users> views.py

    view는 실질적으로 html파일의 기능 구현
from django.shortcuts import render, redirect
# render: html 파일을 화면에 보여줌

from .models import UserModel
# 지금 파일과 같은 위치에 있는 models라는 파일에서 UserModel을 가져온다

-> UserModel은 models에 있는 클래스

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)
        #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')
        #회원가입이 완료되면 로그인 페이지로 이동
  • request vs redirect
- request(request,template_name)-> 화면에 기재된 템플릿을 띄움(기본형)

render(request, template_name, context=None, content_type=None, status=None, using=None)

- redirect(url)(기본형)

redirect(to, permanent=False, *args, **kwargs)

->url은 상대, 절대 모두 사용가능
->url로 이동한다 = url에 해당하는 views.py가 실행된다


🕔💣 Time Attack 💣🕔

  • 지역변수와 전역변수
a = 10

def test1():
    b = 20
def test2():
    print(a) # 10은 나오고!!
    print(b) # 얘만!! 에러남 (NameError: name 'b' is not defined)

test1()
test2()

-> 10은 나옴!!!!

  • 리스트로 형변환
a = list('abcdefg')
print(a)

  • 숫자들의 리스트 만들기
numbers = [x for x in range(1, 10001)]

->1부터 10000까지의 수면 10001을 써야한다⭐️⭐️⭐️

numbers = list(range(1,10001))

-> 이렇게도 만들 수 있다 wow

  • 합계 정렬
users.sort(key=lambda x: sum([x['math_score'],x['science_score'],x['english_score'],x['social_score']]),reverse=True)
sorted_users = users.sorted(users,key=lambda x:x['math_score']+x['science_score']+x['english_score']+x['social_score'])

sum은 써도 되고 안써도 상관없고
중요한건 모양 -> 리스트.sort(key=lambda x: 수식)
이게 왜이렇게 생각이 안나지 ㅠㅠ

profile
looooggi

0개의 댓글