본문 바로가기

Project/ToyProject

[Rmanager] Basic code/ login/ board

반응형

가상 환경 설정하고 프로젝트 준비하기

1. 폴더 생성 후 Visualcode에서 폴더 열기 - 터미널 창 띄우기

2. pip3 install vituralenv - 컴퓨터에 가상 환경 패키지 설치하기

3. vituralenv 'project 이름' - 가상환경에서 project 생성하기

4. source 'project 이름'/bin/activate - 가상 환경 사용 코드

5. pip install django - 장고 프레임워크 설치하기

6. django-admin startproject 'project명' - project 생성하기

7. cd project - project 진입

8. django-admin startapp 'appname' - app 생성

* 프로젝트 안에 여러 앱이 들어간다

* 앱 단위로 코드를 분리해서 관리한다

* 앱 생성시 settings.py 에 등록해야 한다

Models.py - 클래스 정의

ex) class Fcuser(models.Model): username=models.CharField(max_length=32, verbose_name='사용자명')

/ DatetimeField - auto_now_add = True /

class 함수 하단에 / def __str__(self): return self.username /

모델 하단에 class Meta 코드로 DB 설정 가능

class Meta : db_table = '테이블명'

verbose_name = '*'

verbose_name_plural = '*'

python manage.py runserver - local환경에서 서버 실행

python manage.pt createsuperuser - 관리자 생성

admin.py 진입

from. models import Fcuser - 모델 임포트 하기

class FcuserAdmin(admin.ModelAdmin):

list_display('username', 'password') - 튜플 형식으로 보이는 값을 지정할 수 있음

admin.site.register(Fcuser, FcuserAdmin)

-> test 하기 위해서 admin에 등록하고 admin 페이지에서 db test.

template은 <head>에 부트스트랩 css, js CDN 가져오고 <body>에 만들 코드를 작성한다

Views.py - ex) def register(request): return render(request, 'register.html')

url 설정 - ex) path('fcuser/', include('fcuser.urls'))

- fcuser 앱 안에 urls.py 생성 / from. import views / path('register/', views.register)

<form method ="POST" action"."> - form을 통해 서버에 data를 보낸다

{% csrf_token %} 서버에 data를 보낼 때 암호화를 시키고 보냄 - 미작성 시 오류 발생

model 변경 시 - 1. python manage.py makemigrations -> 2. python manage.py migrate

static 등록 - settings.py 하단

STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ]

-------------------------------------------------------------------------------------------------------------------------------

* login

forms.py -

form django import forms

class LoginForm(forms.Form):

username = forms.CharField(error_message = {'required' = '아이디를 입력해주세요'}, max_length=32, label = '사용자 이름')

password = forms.CharField(error_message = {'required' = '비밀번호를 입력해주세요'} , widget = forms.PasswordInput, label = '비밀번호')

def clean(self):

cleaned_data = super(). clean()

username = cleaned_data_get('username')

password = cleaned_data_get('password')

if username and password :

fcuser = Fcuser.objects.get(username=username)

if not check_password(password. fcuser.password):

self. add_error ('password', '비밀번호를 틀렸습니다')

else:

slef.user_id = fcuser.id

-------------------------------------------------------------------------------------------------------------------------------

views.py -

def login(request):

if request.method == "POST" :

form = LoginForm(request.POST)

if form.is_valid():

request.session ['user'] = form.user_id

return redirect('/')

else :

form = LoginForm()

return render(request, 'login.html', {'form':form})

-------------------------------------------------------------------------------------------------------------------------------

template - {form.as_table} or {form.as_p}를 통해 구현할 수 있지만 반복문을 사용하여 원하는 그림을 구현할 수 있음

<form method = 'POST' action=".">

{% csrf_token %}

{% for filed in form %}

<div class = "form_group">

<label for = "{{ field.id_for_label }}"> {{ field.label }} </label>

<input type = "{{ field.field.widget.input_type }}"

class = "form-control" id = "{{ field.id_for_label }}"

placeholder = "{{ field.label }}" name = "{{ field.name }}" />

{% if field.errors %}

<span style = "color:red"> {{ field.errors }} </span>

{% endif %}

{% endfor %}

-------------------------------------------------------------------------------------------------------------------------------

로그아웃 기능 구현

def logout(request):

if request.session.get('user'):

del(request.session ['user'])

return redirect('/')

-url설정 : path('logout/' , views.logout)

-------------------------------------------------------------------------------------------------------------------------------

 

class Board(models. Model):

title = models.CharField(max_length=128, verbose_name='제목')

contents = models.TextFiled(verbose_name='내용')

writer = models.Foreignkey('fcuser.Fcuser', on_delete=models.CASCADE, verbose_name='작성자')

def __str__(self):

return self.title

class Meta:

db_table = "board"

verbose_name = "게시글"

verbose_name_plural = "게시글"

-------------------------------------------------------------------------------------------------------------------------------

views.py

def board_list (request):

boards= Board.objects.all() , order_by('-id')

return render (request, 'board_list.html', {'board':board})

-------------------------------------------------------------------------------------------------------------------------------

html

admin에 등록하고 관리자 사이트에서 테스트 글 작성하여 확인한다

반복문을 사용하여 코드 작성

======생략======

{% for board in boards %}

<tr>

<th> {{ board.id }} </th>

<th> {{ board.title }} </th>

<th> {{ board.writer }} </th>

</tr>

{% endfor %}

-------------------------------------------------------------------------------------------------------------------------------

글쓰기 form 구현

class Boardform(forms.Form):

title = forms.CharField(error_message ={'required':'제목을 입력해주세요'}, max_length=128, label ="제목")

contents = forms.CharField(error_message ={'required':'내용을 입력해주세요'}, widget : forms.Textarea, label ="내용")

-------------------------------------------------------------------------------------------------------------------------------

url 연결 - path('write/', views.board_wirte)

/ html 구성해서 화면 만들기 /

-------------------------------------------------------------------------------------------------------------------------------

views.py

def board_wirte(request):

if request.method == 'POST':

form = BoardForm(request.POST)

if form.is_valid():

user.id = request.session.get('user')

fcuser = Fcuser.objects.get(pk=user_id)

board=Board()

board.title= form.cleaned_data ['title']m.cleaned_data['title']

board.contents= form.cleaned_data ['contents']m.cleaned_data['contents']

board.writer = fcuser

board.save()

return redirect('/board/list/')

else:

form = Boardform()

return render(request, 'board_write.html', {'form':form})

이후 상세보기 페이지 만들기

반응형

'Project > ToyProject' 카테고리의 다른 글

[Rmanager] Decorator  (0) 2021.07.31
[Rmanager] generic view  (0) 2021.07.31
[Rmanager] Basic tool  (0) 2021.07.31
[Rmanager] STEP - 4th  (0) 2021.07.31
[Rmanager] STEP - 3th  (0) 2021.07.31