Share
Sign In
TIL 웹개발 - flask, request, form
서경태
html작성 코드
html 구현
먼저 html에서 form 형태를 작성한다.
<form action:'/ 보낼 곳' method = '방식'>
action : 어디로 보낼지 정하는 것이다. 파이썬에서 라우트하는 곳으로 설정한게 된다.
method : form에서 지원하는 방식은 여러가지가 있는데 보통 get과 post를 사용한다.
get은 검색처럼 데이터를 요청할때 사용한다.
post는 로그인처럼 정보를 서버에 전달할 때 사용한다.
<select name="요청 이름" — — —>
<option
value ="값"></<option>
부트스트랩에서 사용한 셀렉트 방식으로 가위바위보를 골라서 제출하도록 했다.
name : 파이썬이 요청 받을때 여기서 정해진 이름으로 데이터를 받는다.
value : name이란 데이터의 값을 말한다.
예를 들어, 가위바위보 게임을 한다면 name은 내가 낼 패를 말하고 value는 가위, 바위, 보 처럼 선택한 값을 말한다.
<input button type ='submit'>
버튼을 통해 제출되도록 설정했다.
라우트를 사용해 html의 데이터를 받는다.
위에서 본 action 과 methods를 먼저 써준다.
methods는 html에서 post만 사용했는데 왜 둘 다 써야할까?
그 이유는,
사용자가 웹페이지를 처음 방문할 때 기본적으로 get 요청을 통해 페이지를 로딩한다. 따라서 get 메서드를 포함하지 않으면 로딩시 오류가 생길수 있다.
get을 사용하지 않더라도 꼭 둘 다 써야함을 기억하자!
user_choice = request.form['user_choice'] 로 name과 같은 값을 통해 value값을 매개변수(user_choice 앞에 거)에 지정한다.
이렇게 하면 form은 정상적으로 작동한다.
/kyugntae-ai
Subscribe
TIL 웹개발 - 알고리즘이란?
파이썬 과정을 마치고 알고리즘과 자료구조에 대한 강의를 시작했다. 알고리즘이란? 같은 문제를 풀더라도 공간적으로 시간적으로 더 효율적으로 풀기 위한 것 시간 복잡도 입력값과 문제를 해결하는데 걸리는 시간과의 상관관계를 말한다. 입력갓이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 ㅐ로 늘어나는지 보는 것. 공간 복잡도 입력값과 문제를 해결하는데 걸리는 공간과의 상관관계를 말한다. 입력값이 2ㅐ로 늘어났을 때 문제를 해결하는 데 걸리는 공간은 몇 배로 늘어나는지를 보는 것. 점근 표기법 알고리즘의 성능을 수학적으로 표기하는 기법으로 알고리즘의 '효율성'을 평가하는 방법이다. 빅오(Big-O) 표기범 최악의 성능이 나올때 어느정도 연산량이 걸릴지 표기 방법: O(N) N은 얼마나 계산하냐를 말하기 때문에 for문이 한번 있으면 O(N)으로 사용하고 for문이 2개 중첩된 알고리즘은 O(N제곱) 으로 표기한다. 빅 오메가(Big -Ω) 표기법 최선의 성능이 나올때 어느정도의 연산량이 걸릴지 표기 방법: Ω(1) 빅 오메가는 거의 사용하지 않는다. 왜냐하면 보통 최악의 경우를 대비하기때문. 최선은 가장 좋으면 1이지만 최악은.... 상상하기 싫다. 알파벳 찾기 문제
서경태
TIL 웹개발 - 두 class로 생성한 instance 연결, 공유하는 법
과제 내용을 보면 두 개의 class를 사용한다. 계정을 생성하는 Member 클래스 포스트를 생성하는 Post 클래스 각 클래스로 생성한 인스턴스를 리스트로 만들어 보여주는데 우리는 덧붙여 포스트를 삭제하는 기능을 넣었다. 그냥 __del__(소멸자: __init__과 반대)를 사용하면 되는거 되네 싶었는데, 실제 서비스에선 다른 사람이 내글을 마음대로 지운다면 진짜 개빡칠 것 아닌가? 그래서 아이디와 비밀번호를 기입해 포스트 삭제에 대한 권한을 부여한다. members = [m1, m2, m3] m1 = [name, username, password] Member 클래스로 만든 member 인스턴스와 인스턴스를 리스트로 만든 memebrs다. posts [p1, p2, p3] p1 = [title, content, author] Post 클래스로 만든 post 인스턴스와 인스턴스를 리스트로 만든 posts다. (단, author = username) 두 데이터를 연결시키는 방법은 post의 author 속성에 Member 클래스 인스턴스를 넣는 것이다. 그러면 아래 이미지처럼 사용할 수 있다. 그럼 p1 = [title, content, m1] 형태로 사용할수 있고 p1의 author를 알고 싶다면 p1.author.username을 사용하면된다. 그리고 만약 p1의 비밀번호를 알려면 p1.author.password를 사용하면 된다. elif select == '4': # 게시글 작성 while True: id_input = input("ID를 입력해주세요. ") member_matched = None for member in members: if id_input == member.username: member_matched = member break if member_matched: while True: ps_input = input("패스워드를 입력해주세요. ") if ps_input == member_matched.password: print("게시글을 작성해주세요.") title = input("\n제목: ") content = input("내용: ") posts.append(Post(title, content, member_matched)) print("\n게시글 작성을 완료했습니다.") break else: print("패스워드가 일치하지 않습니다.") break else: print("ID가 존재하지 않습니다. ") 위 코드에선 게시글을 작성할 때, 아이디와 비밀번호를 확인한다. 확인이 맞으면(memebr_matched) 제목과 내용을 기입하고 posts 리스트에 post 객체가 추가되는데 여기서 author에 member_matched를 사용한다. member_matched는 아이디와 비밀번호로 찾은 member 인스턴스이다. elif select == '5': # 게시글 삭제 del_title = input("삭제할 게시글의 제목을 입력하세요. ") post_matched = None for post in posts: if del_title == post.title: post_matched = post break if post_matched: while True: id_input = input("ID를 입력해주세요. ") if id_input == post_matched.author.username: while True: ps_input = input("패스워드를 입력해주세요. ") if ps_input == post_matched.author.password: posts.remove(post_matched) print(f'{post_matched.title}이 삭제되었습니다.') break else: print("패스워드가 일치하지 않습니다.") break else: print("아이디가 일치하지 않습니다.") 이렇게 게시글을 삭제할때, title을 검색해서 삭제할 post를 선택(post_matched라고 정의)하고 username과 password가 일치하면 삭제되는 기능이다. post_matched.author.username = member.username post_matched.author.password = member.password 기억하자. 두 클래스는 인스턴스를 공유할 수 있고 그 방법은 한 인스턴스를 다른 클래스의 속성으로 사용하면 된다.
서경태
TIL 웹개발 - Class 개념 정리
클래스(class) : 클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 클래스는 데이터(어트리뷰트)와 행동(메서드)을 정의합니다. 객체(object) : 객체는 클래스의 인스턴스입니다. 클래스는 객체의 구조와 동작을 정의하고, 객체는 클래스에 정의된 구조와 동작을 실제로 구현한 것입니다. 인스턴스(instance) : 인스턴스는 클래스로부터 생성된 개별 객체를 의미합니다. 각 인스턴스는 독립적인 값을 가지며, 클래스에 정의된 속성과 메서드를 사용할 수 있습니다. 인스턴스 어트리뷰트(속성) : 인스턴스 어트리뷰트는 각 인스턴스마다 개별적으로 저장되는 데이터를 의미합니다. 보통 __init__ 메서드 내에서 정의됩니다. 클래스 어트리뷰트(속성) : 클래스 어트리뷰트는 클래스 자체에 속하는 변수로, 모든 인스턴스가 공유합니다. 메서드(methods) : 메서드는 클래스 내부에 정의된 함수로, 객체의 행동을 정의합니다. 메서드는 첫 번째 인자로 self를 받아 인스턴스의 속성과 상호작용합니다. 상속(inheritance) : 상속은 기존 클래스를 바탕으로 새로운 클래스를 정의하는 것입니다. 새로운 클래스는 기존 클래스의 속성과 메서드를 물려받습니다. 다형성(polymorphism) : 다형성은 동일한 메서드가 다른 객체에서 다르게 동작할 수 있게 하는 것입니다. 이는 주로 메서드 오버라이딩을 통해 구현됩니다. 캡슐화(encapsulation) : 캡슐화는 객체의 속성과 메서드를 외부에서 직접 접근하지 못하게 하고, 객체 내부에서만 접근할 수 있게 하는 것입니다. 보통 접근자와 설정자를 통해 구현됩니다. 추상화(abstraction) : 추상화는 객체의 복잡성을 줄이고, 필요한 부분만 노출하는 것입니다. 이는 추상 클래스를 통해 구현될 수 있습니다.
서경태