2-4 djangoモデル(Pythonでデータを作成、読み取り、削除、修正)、ユーザー管理
24889 ワード
障害モデルによるSQLの作成/実行(ORM)
ORM=オブジェクト関係マッピング
内蔵ORM
ORMの役割:SQLを記述する必要がなく、ストレージモデルからデータベースにアクセスできます.(クエリー/追加/変更/削除)
(重要)SQLがわからなくてもいいというわけではありません.少なくとも私が作成したコードがどのようなSQLを生成するかを検証することができます.
0.基本任務の準備
ORM=オブジェクト関係マッピング
内蔵ORM
ORMの役割:SQLを記述する必要がなく、ストレージモデルからデータベースにアクセスできます.(クエリー/追加/変更/削除)
(重要)SQLがわからなくてもいいというわけではありません.少なくとも私が作成したコードがどのようなSQLを生成するかを検証することができます.
0.基本任務の準備
MySQL Client Unicodeでデータベースblogを作成します.
blog使用後
show tablesで確認してみます
Python端末にpip mysqlclientをインストールする
「≪設定|Setup|Eas≫」で、データベース・セクションを次のように変更します:
を選択します.
端末でPythonを管理する.pymigrateなら
無数のokを経て完成
appフォルダのタイトルは「フリー」です
ここでは板で作るつもりです.
python manage.py startapp board
ボードに行ってモデルをします.
データ・フォームの完了後
settingsへ
INSTALLED APPSに作成したappフォルダ名を記入します.
python manage.pymakemigrations boardなら
Migrations for 'board':
board\migrations\0001_initial.py
- Create model Board
そしてまた
python manage.pymigrateは完成しました
show tablesで確認してみます
board boardが追加されていることを確認できます
desc board_board; ノッキング
このようにタイプを確認できます.
djangoモデルの利用
models.理由を表すfrom django.db import models
# Create your models here.
class Board(models.Model):
title = models.CharField(max_length=200)
contents = models.TextField()
create_date = models.DateTimeField(auto_now_add=True)
こうやってclass board
次に、受信したデータがpostの場合に使用されるformsというpyファイルを作成します.from django import forms
from .models import Board
class BoardForm(forms.ModelForm):
class Meta:
model = Board
fields = ('title', 'contents')
入力# html에서 다음과 같이 폼에다가 input넣지 않아도 됨
# fields값 안에 title과 contents가 input name에 해당
# <!--<form method="post" action="/board/register">-->
# <!-- {% csrf_token %}-->
# <!-- <input type="text" name="title">-->
# <!-- <input type="text" name="content">-->
# <!-- <input type="submit">-->
# <!--</form>-->
<form action = "/board/register" method="post">
{% csrf_token %}
{{ boardForm }}
<input type="submit">
</form>
これらを入力するだけで、上のキャラクターに代わることができます.
1.データの作成
1) views.pyコンテンツ
def register(request):
if request.method == "GET":
#만약 요청이 겟 방식이면
boardForm = BoardForm()
#import한 forms. 안의 값인 BoardForm의 값을 board form에 저장합니다.
return render(request, 'board/register.html',
{'boardForm':boardForm})
# 그 후 함수는 board/register.html을 보여주고 위에서 저장한 데이터를 'boardForm'에 저장합니다.
# render라는 함수가 boardForm의 데이터 board폴더에 forms.py 안에 있는 데이터 받아와 board/register.html을 완성시킨다는 개념
이때 'boardForm'은 register.html에서
<form action = "/comment/register" method="post">
{% csrf_token %}
{{ commentForm }}
<input type="submit">
</form>
폼 안에 {{}}부분에 해당하게된다.
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
만약 요청이 POST 방식이라면
#import한 forms. 안의 값인 BoardForm인 입력받은 POST
값을 board form에 저장합니다.
# 모델폼을 이용하면 알아서 다 받아짐
if boardForm.is_valid():
#boardForm안에 값이 유효한다면
board = boardForm.save(commit=False)
#board라는 변수에 BoardForm(request.POST)에서 받아온 값을 저장한다.
board.save()
#그후 board를 저장하고
return redirect('/board/register')
# 패쓰값 /board/register로 가고 그러면 url로 인해 다시 처음의 def register가 실행됨
入力すると、アドレスhttp://127.0.0.1:8000/board/register理由を表すに入力ボックスがあり、ここに値を入力すると、データベースに格納されます.
この値を読み込み、他のページに表示するには
views.理由を表すdef posts(request) :
posts = Board.objects.all() #board table에서 모든 데이터를 다 가져옴
return render(request, 'board/list.html',
{'posts': posts})
作成します.
urlにパスを設定します.
path('board/list',board.views.posts)
2) list.htmlコンテンツ
{% if posts %} <!--posts안에 데이터가 담겨 있으면 반복문을 실행한다. -->
{% for post in posts %} <!--posts안에 있는 것을 하나하나 꺼내서 post에 저장한다 파이썬과 용법 동일함 -->
<div>
<tr>
<td> {{post.id}} </td> <!--post라는 객체 안에 있는 id를 보여준다 -->
<td> {{ post.title }} </td>
<td> {{ post.create_date }} </td>
</tr>
</div>
{% endfor %}
{% endif %}
次のように条件文を繰り返します.
この形式で出力できます.
2.データの読み出し
1) views.pyコンテンツ
def read(request, bid) :
post = Board.objects.get( Q(id=bid))
#posts = Board.objects.all()
위의 내용은 board table에서 모든 데이터를 다 가져오는 것이고 조건을 지정하려면
.all이 아닌 .get을 사용
bid에 해당하는 내용이 post에 담기고 게시글의 id를 불러올 것이다
bid는 사용자가 요청한 게시글에 대한 얘기
return render(request, 'board/read.html',{'read' : post})
#board/read.html페이지를 보여주고 Board.objects.get( Q(id=bid))의 값
을 'read'로 저장한다.
2) read.htmlコンテンツ
{% if read %} <!--read안에 데이터가 담겨 있으면 반복문을 실행한다. -->
<div>
<tr>
<td> {{read.id}} </td> <!--read라는 객체 안에 있는 id를 보여준다 -->
<td> {{read.title }} </td>
<td> {{read.contents}} </td>
<td> {{read.create_date }} </td>
</tr>
</div>
{% endif %}
3.データの削除
1) view.py
def delete(request, bid) :
post = Board.objects.get(Q(id = bid))
post.delete()
post는 Board에서 특정조건 id의 값을 저장
그후 그 값을 삭제
return redirect('/board/list')
패스 /board/list로 이동
2) delete.html
コンテンツを削除したのでありません...
4.データの修正
1) view.py
def update(request, bid) :
post = Board.objects.get(Q(id=bid)) #게시글 하나를 가져오는것
if request.method == "GET" :
boardForm = BoardForm(instance=post)
#특정 조건 id에 해당하는 값을 저장한다.
return render(request,'board/update.html',{'boardForm' : boardForm})
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
# boardForm에서 사용자가 보내온 데이터를 받느다
if boardForm.is_valid(): #boardForm안에 값이 유효한다면
post.title = boardForm.cleaned_data['title']
#boardForm의 값이 출력되면 html의 형식까지 모든게 서버로 보내지기 때문에
우리가 필요한 값 'title'만 뽑아내기 위해 cleaned_data를 사용한다.
post.contents = boardForm.cleaned_data['contents']
post.save()
return redirect('/board/list')
2) update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method = "post">
{% csrf_token %}
{{boardForm}}
<input type = 'submit'>
<!-- form에는 원래 버튼을 누르면 action이라고 적힌 부분을 반복하지만 없기 때문에 현재 url로 보낸다.-->
</form>
</body>
</html>
5.会員管理の作成
1)会員収入
既存はデータ受信時のモデルです.pyに入力する値を指定して使用しましたが、今回はdjangoで指定した値のみを使用します.
(1) views.py
def signup(request):
if request.method == "GET":
signupForm = UserCreationForm()
#UserCreationForm()이 장고가 제공하는 것
return render(request, 'users/signup.html',{'signupForm': signupForm})
elif request.method == "POST" :
signupForm = UserCreationForm(request.POST)
if signupForm.is_valid():
signupForm.save()
return redirect('/users/signup')
(2) html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
ユーザー/ログイン
次のように、プリセットウィンドウを表示して値を入力します.
パスワードの場合、次のルールを満たさないとエラーが発生します.
post形式で受信したデータはmysqlclientにテーブルがあります
auth userに保存します.
select from auth_user\G; これにより、格納されているデータを1つずつ表示できます.
selectfrom auth userを表形式で表示できます
資料が増えているので、特定のIDだけを見たいなら
select * from auth_user where username = 'kst511313'\G; 条件を一緒に賭けることができます.
2)ログイン
(1) views.py
def userlogin(request) :
if request.method == "GET":
loginForm = AuthenticationForm() <-- 장고가 제공하는 로그인 폼
return render(request, 'users/login.html',{'loginForm': loginForm})
elif request.method == "POST" :
loginForm = AuthenticationForm(request, request.POST)
# 로그인만은 신기하게 (request.POST)가 아닌 (request, request.POST)를 사용한다.
if loginForm.is_valid(): #검증단계
login(request, loginForm.get_user())
return redirect('/board/list')
else :
return redirect('/users/login')
(2) userlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
htmlは既存のフォーマットと同じで、その内容のみを表示します.pyの特定の関数で送信された値に置き換えるだけです.
3)ログアウト
(1) views.py
def userlogout(request) :
logout(request)
return redirect('/users/login')
Reference
この問題について(2-4 djangoモデル(Pythonでデータを作成、読み取り、削除、修正)、ユーザー管理), 我々は、より多くの情報をここで見つけました
https://velog.io/@kst5137/2-4-django-model파이썬에서-data추가하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from django.db import models
# Create your models here.
class Board(models.Model):
title = models.CharField(max_length=200)
contents = models.TextField()
create_date = models.DateTimeField(auto_now_add=True)
from django import forms
from .models import Board
class BoardForm(forms.ModelForm):
class Meta:
model = Board
fields = ('title', 'contents')
# html에서 다음과 같이 폼에다가 input넣지 않아도 됨
# fields값 안에 title과 contents가 input name에 해당
# <!--<form method="post" action="/board/register">-->
# <!-- {% csrf_token %}-->
# <!-- <input type="text" name="title">-->
# <!-- <input type="text" name="content">-->
# <!-- <input type="submit">-->
# <!--</form>-->
<form action = "/board/register" method="post">
{% csrf_token %}
{{ boardForm }}
<input type="submit">
</form>
1) views.pyコンテンツ
def register(request):
if request.method == "GET":
#만약 요청이 겟 방식이면
boardForm = BoardForm()
#import한 forms. 안의 값인 BoardForm의 값을 board form에 저장합니다.
return render(request, 'board/register.html',
{'boardForm':boardForm})
# 그 후 함수는 board/register.html을 보여주고 위에서 저장한 데이터를 'boardForm'에 저장합니다.
# render라는 함수가 boardForm의 데이터 board폴더에 forms.py 안에 있는 데이터 받아와 board/register.html을 완성시킨다는 개념
이때 'boardForm'은 register.html에서
<form action = "/comment/register" method="post">
{% csrf_token %}
{{ commentForm }}
<input type="submit">
</form>
폼 안에 {{}}부분에 해당하게된다.
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
만약 요청이 POST 방식이라면
#import한 forms. 안의 값인 BoardForm인 입력받은 POST
값을 board form에 저장합니다.
# 모델폼을 이용하면 알아서 다 받아짐
if boardForm.is_valid():
#boardForm안에 값이 유효한다면
board = boardForm.save(commit=False)
#board라는 변수에 BoardForm(request.POST)에서 받아온 값을 저장한다.
board.save()
#그후 board를 저장하고
return redirect('/board/register')
# 패쓰값 /board/register로 가고 그러면 url로 인해 다시 처음의 def register가 실행됨
入力すると、アドレスhttp://127.0.0.1:8000/board/register理由を表すに入力ボックスがあり、ここに値を入力すると、データベースに格納されます.この値を読み込み、他のページに表示するには
views.理由を表す
def posts(request) :
posts = Board.objects.all() #board table에서 모든 데이터를 다 가져옴
return render(request, 'board/list.html',
{'posts': posts})
作成します.urlにパスを設定します.
path('board/list',board.views.posts)
2) list.htmlコンテンツ
{% if posts %} <!--posts안에 데이터가 담겨 있으면 반복문을 실행한다. -->
{% for post in posts %} <!--posts안에 있는 것을 하나하나 꺼내서 post에 저장한다 파이썬과 용법 동일함 -->
<div>
<tr>
<td> {{post.id}} </td> <!--post라는 객체 안에 있는 id를 보여준다 -->
<td> {{ post.title }} </td>
<td> {{ post.create_date }} </td>
</tr>
</div>
{% endfor %}
{% endif %}
次のように条件文を繰り返します.この形式で出力できます.
2.データの読み出し
1) views.pyコンテンツ
def read(request, bid) :
post = Board.objects.get( Q(id=bid))
#posts = Board.objects.all()
위의 내용은 board table에서 모든 데이터를 다 가져오는 것이고 조건을 지정하려면
.all이 아닌 .get을 사용
bid에 해당하는 내용이 post에 담기고 게시글의 id를 불러올 것이다
bid는 사용자가 요청한 게시글에 대한 얘기
return render(request, 'board/read.html',{'read' : post})
#board/read.html페이지를 보여주고 Board.objects.get( Q(id=bid))의 값
을 'read'로 저장한다.
2) read.htmlコンテンツ
{% if read %} <!--read안에 데이터가 담겨 있으면 반복문을 실행한다. -->
<div>
<tr>
<td> {{read.id}} </td> <!--read라는 객체 안에 있는 id를 보여준다 -->
<td> {{read.title }} </td>
<td> {{read.contents}} </td>
<td> {{read.create_date }} </td>
</tr>
</div>
{% endif %}
3.データの削除
1) view.py
def delete(request, bid) :
post = Board.objects.get(Q(id = bid))
post.delete()
post는 Board에서 특정조건 id의 값을 저장
그후 그 값을 삭제
return redirect('/board/list')
패스 /board/list로 이동
2) delete.html
コンテンツを削除したのでありません...
4.データの修正
1) view.py
def update(request, bid) :
post = Board.objects.get(Q(id=bid)) #게시글 하나를 가져오는것
if request.method == "GET" :
boardForm = BoardForm(instance=post)
#특정 조건 id에 해당하는 값을 저장한다.
return render(request,'board/update.html',{'boardForm' : boardForm})
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
# boardForm에서 사용자가 보내온 데이터를 받느다
if boardForm.is_valid(): #boardForm안에 값이 유효한다면
post.title = boardForm.cleaned_data['title']
#boardForm의 값이 출력되면 html의 형식까지 모든게 서버로 보내지기 때문에
우리가 필요한 값 'title'만 뽑아내기 위해 cleaned_data를 사용한다.
post.contents = boardForm.cleaned_data['contents']
post.save()
return redirect('/board/list')
2) update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method = "post">
{% csrf_token %}
{{boardForm}}
<input type = 'submit'>
<!-- form에는 원래 버튼을 누르면 action이라고 적힌 부분을 반복하지만 없기 때문에 현재 url로 보낸다.-->
</form>
</body>
</html>
5.会員管理の作成
1)会員収入
既存はデータ受信時のモデルです.pyに入力する値を指定して使用しましたが、今回はdjangoで指定した値のみを使用します.
(1) views.py
def signup(request):
if request.method == "GET":
signupForm = UserCreationForm()
#UserCreationForm()이 장고가 제공하는 것
return render(request, 'users/signup.html',{'signupForm': signupForm})
elif request.method == "POST" :
signupForm = UserCreationForm(request.POST)
if signupForm.is_valid():
signupForm.save()
return redirect('/users/signup')
(2) html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
ユーザー/ログイン
次のように、プリセットウィンドウを表示して値を入力します.
パスワードの場合、次のルールを満たさないとエラーが発生します.
post形式で受信したデータはmysqlclientにテーブルがあります
auth userに保存します.
select from auth_user\G; これにより、格納されているデータを1つずつ表示できます.
selectfrom auth userを表形式で表示できます
資料が増えているので、特定のIDだけを見たいなら
select * from auth_user where username = 'kst511313'\G; 条件を一緒に賭けることができます.
2)ログイン
(1) views.py
def userlogin(request) :
if request.method == "GET":
loginForm = AuthenticationForm() <-- 장고가 제공하는 로그인 폼
return render(request, 'users/login.html',{'loginForm': loginForm})
elif request.method == "POST" :
loginForm = AuthenticationForm(request, request.POST)
# 로그인만은 신기하게 (request.POST)가 아닌 (request, request.POST)를 사용한다.
if loginForm.is_valid(): #검증단계
login(request, loginForm.get_user())
return redirect('/board/list')
else :
return redirect('/users/login')
(2) userlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
htmlは既存のフォーマットと同じで、その内容のみを表示します.pyの特定の関数で送信された値に置き換えるだけです.
3)ログアウト
(1) views.py
def userlogout(request) :
logout(request)
return redirect('/users/login')
Reference
この問題について(2-4 djangoモデル(Pythonでデータを作成、読み取り、削除、修正)、ユーザー管理), 我々は、より多くの情報をここで見つけました
https://velog.io/@kst5137/2-4-django-model파이썬에서-data추가하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def read(request, bid) :
post = Board.objects.get( Q(id=bid))
#posts = Board.objects.all()
위의 내용은 board table에서 모든 데이터를 다 가져오는 것이고 조건을 지정하려면
.all이 아닌 .get을 사용
bid에 해당하는 내용이 post에 담기고 게시글의 id를 불러올 것이다
bid는 사용자가 요청한 게시글에 대한 얘기
return render(request, 'board/read.html',{'read' : post})
#board/read.html페이지를 보여주고 Board.objects.get( Q(id=bid))의 값
을 'read'로 저장한다.
{% if read %} <!--read안에 데이터가 담겨 있으면 반복문을 실행한다. -->
<div>
<tr>
<td> {{read.id}} </td> <!--read라는 객체 안에 있는 id를 보여준다 -->
<td> {{read.title }} </td>
<td> {{read.contents}} </td>
<td> {{read.create_date }} </td>
</tr>
</div>
{% endif %}
1) view.py
def delete(request, bid) :
post = Board.objects.get(Q(id = bid))
post.delete()
post는 Board에서 특정조건 id의 값을 저장
그후 그 값을 삭제
return redirect('/board/list')
패스 /board/list로 이동
2) delete.html
コンテンツを削除したのでありません...
4.データの修正
1) view.py
def update(request, bid) :
post = Board.objects.get(Q(id=bid)) #게시글 하나를 가져오는것
if request.method == "GET" :
boardForm = BoardForm(instance=post)
#특정 조건 id에 해당하는 값을 저장한다.
return render(request,'board/update.html',{'boardForm' : boardForm})
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
# boardForm에서 사용자가 보내온 데이터를 받느다
if boardForm.is_valid(): #boardForm안에 값이 유효한다면
post.title = boardForm.cleaned_data['title']
#boardForm의 값이 출력되면 html의 형식까지 모든게 서버로 보내지기 때문에
우리가 필요한 값 'title'만 뽑아내기 위해 cleaned_data를 사용한다.
post.contents = boardForm.cleaned_data['contents']
post.save()
return redirect('/board/list')
2) update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method = "post">
{% csrf_token %}
{{boardForm}}
<input type = 'submit'>
<!-- form에는 원래 버튼을 누르면 action이라고 적힌 부분을 반복하지만 없기 때문에 현재 url로 보낸다.-->
</form>
</body>
</html>
5.会員管理の作成
1)会員収入
既存はデータ受信時のモデルです.pyに入力する値を指定して使用しましたが、今回はdjangoで指定した値のみを使用します.
(1) views.py
def signup(request):
if request.method == "GET":
signupForm = UserCreationForm()
#UserCreationForm()이 장고가 제공하는 것
return render(request, 'users/signup.html',{'signupForm': signupForm})
elif request.method == "POST" :
signupForm = UserCreationForm(request.POST)
if signupForm.is_valid():
signupForm.save()
return redirect('/users/signup')
(2) html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
ユーザー/ログイン
次のように、プリセットウィンドウを表示して値を入力します.
パスワードの場合、次のルールを満たさないとエラーが発生します.
post形式で受信したデータはmysqlclientにテーブルがあります
auth userに保存します.
select from auth_user\G; これにより、格納されているデータを1つずつ表示できます.
selectfrom auth userを表形式で表示できます
資料が増えているので、特定のIDだけを見たいなら
select * from auth_user where username = 'kst511313'\G; 条件を一緒に賭けることができます.
2)ログイン
(1) views.py
def userlogin(request) :
if request.method == "GET":
loginForm = AuthenticationForm() <-- 장고가 제공하는 로그인 폼
return render(request, 'users/login.html',{'loginForm': loginForm})
elif request.method == "POST" :
loginForm = AuthenticationForm(request, request.POST)
# 로그인만은 신기하게 (request.POST)가 아닌 (request, request.POST)를 사용한다.
if loginForm.is_valid(): #검증단계
login(request, loginForm.get_user())
return redirect('/board/list')
else :
return redirect('/users/login')
(2) userlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
htmlは既存のフォーマットと同じで、その内容のみを表示します.pyの特定の関数で送信された値に置き換えるだけです.
3)ログアウト
(1) views.py
def userlogout(request) :
logout(request)
return redirect('/users/login')
Reference
この問題について(2-4 djangoモデル(Pythonでデータを作成、読み取り、削除、修正)、ユーザー管理), 我々は、より多くの情報をここで見つけました
https://velog.io/@kst5137/2-4-django-model파이썬에서-data추가하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def update(request, bid) :
post = Board.objects.get(Q(id=bid)) #게시글 하나를 가져오는것
if request.method == "GET" :
boardForm = BoardForm(instance=post)
#특정 조건 id에 해당하는 값을 저장한다.
return render(request,'board/update.html',{'boardForm' : boardForm})
elif request.method == "POST" :
boardForm = BoardForm(request.POST)
# boardForm에서 사용자가 보내온 데이터를 받느다
if boardForm.is_valid(): #boardForm안에 값이 유효한다면
post.title = boardForm.cleaned_data['title']
#boardForm의 값이 출력되면 html의 형식까지 모든게 서버로 보내지기 때문에
우리가 필요한 값 'title'만 뽑아내기 위해 cleaned_data를 사용한다.
post.contents = boardForm.cleaned_data['contents']
post.save()
return redirect('/board/list')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method = "post">
{% csrf_token %}
{{boardForm}}
<input type = 'submit'>
<!-- form에는 원래 버튼을 누르면 action이라고 적힌 부분을 반복하지만 없기 때문에 현재 url로 보낸다.-->
</form>
</body>
</html>
1)会員収入
既存はデータ受信時のモデルです.pyに入力する値を指定して使用しましたが、今回はdjangoで指定した値のみを使用します.
(1) views.py
def signup(request):
if request.method == "GET":
signupForm = UserCreationForm()
#UserCreationForm()이 장고가 제공하는 것
return render(request, 'users/signup.html',{'signupForm': signupForm})
elif request.method == "POST" :
signupForm = UserCreationForm(request.POST)
if signupForm.is_valid():
signupForm.save()
return redirect('/users/signup')
(2) html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
ユーザー/ログイン次のように、プリセットウィンドウを表示して値を入力します.
パスワードの場合、次のルールを満たさないとエラーが発生します.
post形式で受信したデータはmysqlclientにテーブルがあります
auth userに保存します.
select from auth_user\G; これにより、格納されているデータを1つずつ表示できます.
selectfrom auth userを表形式で表示できます
資料が増えているので、特定のIDだけを見たいなら
select * from auth_user where username = 'kst511313'\G; 条件を一緒に賭けることができます.
2)ログイン
(1) views.py
def userlogin(request) :
if request.method == "GET":
loginForm = AuthenticationForm() <-- 장고가 제공하는 로그인 폼
return render(request, 'users/login.html',{'loginForm': loginForm})
elif request.method == "POST" :
loginForm = AuthenticationForm(request, request.POST)
# 로그인만은 신기하게 (request.POST)가 아닌 (request, request.POST)를 사용한다.
if loginForm.is_valid(): #검증단계
login(request, loginForm.get_user())
return redirect('/board/list')
else :
return redirect('/users/login')
(2) userlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action = "/users/login" method="post">
{% csrf_token %}
{{ loginForm }}
<input type="submit">
</form>
</body>
</html>
htmlは既存のフォーマットと同じで、その内容のみを表示します.pyの特定の関数で送信された値に置き換えるだけです.3)ログアウト
(1) views.py
def userlogout(request) :
logout(request)
return redirect('/users/login')
Reference
この問題について(2-4 djangoモデル(Pythonでデータを作成、読み取り、削除、修正)、ユーザー管理), 我々は、より多くの情報をここで見つけました https://velog.io/@kst5137/2-4-django-model파이썬에서-data추가하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol