8. λ°μ΄ν° μ μ₯ + λ΅λ³λ±λ‘ νΌ + URL 맀ν + λ·° ν¨μ + λ΅λ³ μ μ₯ + λ΅λ³ μ‘°ν
# λ΅λ³λ±λ‘ νΌ
- μ§λ¬Έ μμΈ ν¬νλ¦Ώμ μλμ κ°μ΄ λ΅λ³ μ μ₯μ΄ κ°λ₯ν νΌ(form) μΆκ°
+ λ΅λ³ λ΄μ© μ λ ₯νλ 곡κ°μΈ ν μ€νΈμ°½(textarea), λ΅λ³ μ μ₯μ΄ κ°λ₯ν "λ΅λ³λ±λ‘" λ²νΌμ΄ μΆκ°λ¨
+ line 6μ {% url 'pybo:answer_create' question.id %} --> form νκ·Έμ action μμ±μ μλ λ΅λ³ μ μ₯μ μν URL
+ line 7μ {% csrf_token %} --> formμμ μμ±ν λ°μ΄ν°κ° μ€μ λ‘ μΉνμ΄μ§μμ μμ±ν λ°μ΄ν°μΈμ§λ₯Ό νλ¨νλ μν μ ν¨. λ§μ½ μΉνμ΄μ§μμ μμ±ν λ°μ΄ν°κ° μλ κ²½μ° μλ²μμ λ°νν csrf_token κ°κ³Ό λ€λ₯Έ κ³³μμ μμ±λ csrf_token κ°μ΄ λ¬λΌ λΈλ‘νΉλλ€. 보μ κ΄λ ¨ κΈ°λ₯μ΄κΈ°μ form νκ·Έ λ°μ κΌ {% csrf_token %} νκ·Έλ₯Ό λ£μ΄μΌ μ€λ₯κ° λμ§ μλλ€.
+ CSRF(cross site request forgery) : μΉ μ¬μ΄νΈ μ·¨μ½μ 곡격 λ°©μ§λ₯Ό μν κΈ°μ λ‘, μ₯κ³ κ° μΈμ μ ν΅ν΄ λ°νν CSRF ν ν°κ°κ³Ό μΉνμ΄μ§κ° νΌ μ μ‘ μμ ν¨κ» μ μ‘ν ν ν°μ λΉκ΅νμ¬ μ€μ μΉ νμ΄μ§μμ μμ±λ λ°μ΄ν°κ° μ λ¬λλμ§λ₯Ό κ²μ¬νλ κΈ°μ μ΄λ€.
--> csrf_tokenμ μ¬μ©νκΈ° μν΄μλ μλμ²λΌ CsrfViewMiddleware λ―Έλ€μ¨μ΄κ° μμ΄μΌ ν¨.
# URL 맀ν
1. http://localhost:8000/pybo/2/ μ§λ¬Έ μμΈ νμ΄μ§ μμ² --> answer_create λ³μΉμ μ°Ύμ μ μλ€λ μ€λ₯ λ°μ
+ μ§λ¬Έ μμΈ ν νλ¦Ώμ {% url 'pybo:answer_create' question.id %} κ°μ΄ pybo:answer_create λ³μΉμ μ¬μ©νκΈ° λλ¬Έμ μ€λ₯ λ°μ
2. μ€λ₯ ν΄κ²°μ μν΄ pybo/urls.py μ path('answer/create/<int:question_id>/', views.answer_create, name='answer_create') URL 맀νμ λ±λ‘
+ answer_create λ³μΉμ ν΄λΉνλ URL 맀ν κ·μΉμ λ±λ‘ν¨
+ μ΄ν http://locahost:8000/pybo/answer/create/2/ λ±μ νμ΄μ§λ₯Ό μμ²νλ©΄ μμ μΆκ°νλ URL 맀ν κ·μΉμ μν΄ views.answer_create ν¨μκ° νΈμΆλλ€.
# λ·° ν¨μ
: URL 맀ν κ·μΉμ μ μλ views.answer_create ν¨μλ₯Ό pybo/views.py νμΌμ μλμ κ°μ΄ μΆκ°
+ request.POST.get('content') --> ν μ€νΈμ°½μ μ λ ₯ν λ΄μ©μ μ½μ μ μκ² ν¨
+ request.POST.get('content') --> POSTλ‘ μ μ‘λ νΌ(form) λ°μ΄ν° νλͺ© μ€ content κ°μ μλ―Έ
+ λ΅λ³ λ±λ‘ μ ν μ€νΈ μ°½μ μ λ ₯ν λ΄μ©μ answer_create ν¨μμ 첫λ²μ§Έ 맀κ°λ³μ request κ°μ²΄λ₯Ό ν΅ν΄ μ½μ μ μμ
+ answer_create ν¨μμ 맀κ°λ³μ question_idλ URL 맀νμ μν΄ κ° μ λ¬
ex. http://locahost:8000/pybo/answer/create/2/ λΌλ νμ΄μ§λ₯Ό μμ² -> 맀κ°λ³μ question_idμλ κ° 2κ° μ λ¬
+ question.asnswer_set.create --> λ΅λ³ μμ± μν΄ μ¬μ©
+ question.answer_set --> μ§λ¬Έμ λ΅λ³ μλ―Έ
+ Question λͺ¨λΈκ³Ό Answer λͺ¨λΈμ μλ‘ ForignKey λ‘ μ°κ²°λμ΄ μμ
+ redirect ν¨μ : λ΅λ³ μμ± ν μ§λ¬Έ μμΈ νλ©΄μ λ€μ 보μ¬μ£ΌκΈ° μν΄( pybo:detail λ³μΉμ ν΄λΉνλ νμ΄μ§λ‘ μ΄λνκΈ° μν΄ ) μ¬μ©ν νμ΄μ§ μ΄λμ μν ν¨μ
+ pybo:detail λ³μΉμ ν΄λΉνλ URLμ question_idκ° νμ --> question.idλ₯Ό μΈμλ‘ μ λ¬
# λ΅λ³ μ μ₯ λ° μμΈ νλ©΄ νΈμΆ + λ΅λ³ μ‘°ν
1. http://localhost:8000/pybo/2/ νμ΄μ§λ₯Ό μμ²νλ€.
+ λ±λ‘ν λ΅λ³μ νμνλ κΈ°λ₯μ μμ§ ν νλ¦Ώμ μΆκ°νμ§ μμκΈ°μ λ΅λ³μ λ±λ‘νλλΌκ³ νλ©΄μ λ³ν X
2. λ±λ‘ν λ΅λ³μ μ§λ¬Έ μμΈ νλ©΄μ νμνκΈ° μν΄ μ§λ¬Έ μμΈ ν νλ¦Ώμ μλμ²λΌ μμ
+ question.answer_set.count --> λ΅λ³μ μ΄ κ°μ μλ―Έ
+ question.answer_set --> μ§λ¬Έκ³Ό μ°κ²°λ λ΅λ³λ€
3. μ μ₯ -> λ€μ http://localhost:8000/pybo/2/ νμ΄μ§λ₯Ό μμ²
'βοΈ Python Programming > Frameworks' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
< django - 10 > (0) | 2022.08.04 |
---|---|
< django - 9 > (0) | 2022.08.03 |
< django - 7 > (0) | 2022.08.01 |
< django - 6 > (0) | 2022.07.30 |
< django - 5 > (0) | 2022.07.30 |