mysql> create database o2; #o2라는 DB생성 mysql> show databases; #현재 DB모두 보여줌 mysql> use o2 #o2 Db로 접근 mysql> show tables; #테이블 조회 Empty set (0.00 sec)
mysql> create table `topic` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `description` text NOT NULL, `author` varchar(30) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #테이블 생성
mysql> INSERT INTO topic (title, description, author) VALUES('java','Computer language', 'eogo'); #행 추가
SELECT * FROM topic #테이블 모든 행가져옴 조회
mysql> SELECT * FROM topic WHERE id=2; # id=2인 행 가져옴
mysql> UPDATE topic SET title='npm' WHERE id=2; # 수정 #where문 빠트리면 큰일난다.
DELETE From topic where id=2; #삭제
유저 생성 및 권한 부여
1 2 3 4 5 6 7 8 9 10 11 12
키마를 mysql 로 변경하겠습니다.
mysql>use mysql;
mysql>select host,user from user #모든 유저확인 권한없다고할떄 mysql>CREATE USER ‘아이디’@’localhost’ IDENTIFIED BY ‘비번’; mysql>GRANT ALL PRIVILEGES ON *.* TO ‘user’@’localhost’ WITH GRANT OPTION; #*.*는 필요에 따라 DB명.테이블명 을 지정해서 권한을 줄수있음 mysql>flush privileges;
delete from user where user='아이디'; #유저 삭제
1 2 3 4
# 장고와 mysql연동시 에러 발생 처리 migrate에서 에러코드 2059가 뜨고 막히더라구요... 결국 고민하다가 결과가 8.04버전 이상부터는 플러그인 방식이 달라서 생기는 오류였습니다. (버전 8.04 MySQL은 이전에 mysql_native_password를 쓰지않고 caching_password를 기본 인증 플러그인을 쓰니까 그랬습니다.) mysql의 다운그레이드 혹은 mysql에서 ALTER USER '유저이름'@'유저호스트정보' IDENTIFIED WITH mysql_native_password BY '비밀번호'; 로 유저 비밀번호 플러그인 변경후 migrate 재시도하니까 됩니다.
create database DB_NAME default character set utf8 collate utf8_general_ci; #mysql환경에서 utf-8적용된 DB만들기
접속 권한설정까지하면 이제 외부에서 접속도 가능하게된다 (내 컴퓨터에서 workbench를 쓰기위해)
EC2관리 콘솔>보안그룹>인바운드>편집>MySQL추가하기(여기에서 외부모두허용)
이제 DB로 다시가서 속성에서 위에 보안그룹으로 변경 + 보안 그룹에 외부의 EC2인스턴스 접근 ‘예’로 설정해놔야함(혹여나 다른지확인)
이제 MySQL workbench로 원격접속
1 2 3 4
HostName: 앤드포인트 post: 포트번호 (deflualt:3306) Username: 사용자명 password: 사용자 pw
그리고 migrate해보면
오류를 볼수있다 (mysql 5.7이하만.)
이 오류는 strict mode를 켜는 것을 권장하는것이다(mysql이 마음대로 값을 넣어버리는것을 방지함)
1 2 3
WARNING ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/3.0/ref/databases/#mysql-sql-mode
우선 장고에서 static 파일들을 처리할 수 있도록 settings.py 를 설정을 해주자.
# settings.py
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# static files STATIC_URL = '/static/' # STATIC_URL 이 선언되어 있는데, 이건 static 파일을 불러올 때의 URL이다 STATIC_DIR = os.path.join(BASE_DIR, 'static') STATICFILES_DIRS = [ STATIC_DIR, ] 지금까지는 위와 같이 설정해주고 static 폴더 안에 정적 파일들을 넣어 적용시켰었다. 이제 이 상태로 scp 로 서버에 업로드하면 css가 적용되어 있을까? 프로젝트 폴더에 static 폴더를 만들고 아무 내용이나 작성한 test.txt 파일을 하나 넣어두자. 일단 로컬에서 runserver 를 실행하고 localhost:8000/static/test.txt 로 접속하면 아래와 같이 test.txt 의 내용을 확인할 수 있다.
STATICFILES_DIRS 경로 설정(static파일들이 어딧는지알려줘야하니까.)
1 2 3 4
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), # Root의 static 파일 '/mainpages/static/', # mainpages App의 static 파일 )
요청한 static 파일을 위에 설정한 경로 순서대로 찾게된다
불러오기
현재 /static 으로 불러오면 /mainpages/static 폴더를 찾아볼 것이다.
여기서 namespace로 불러오기 위해서 /mainpages/static폴더 안에 mainpages 폴더를 하나 더 만들고
, 그 안에서 static 파일을 불러올 것이다
1 2 3 4
mainpages/static/garden/style.css body { background-color: red; }
이렇게 하나의 프로젝트에서 사용하는 정적 파일들은 여기저기에 분산되어 있기 때문에 요청이 들어왔을 때 필요한 정적 파일을 돌려주려면 많은 경로들을 다 찾아보아야 하며 이는 매우 비효율적일 것이다.
그래서 사용하는 모든 정적 파일을 하나의 경로로 모아주는 작업이 필요하다. runserver 는 개발자가 개발에만 집중할 수 있도록 이 작업을 알아서 해준다. runserver는 알게모르게 알아서 해주는 편의기능이 아주 많다. 하지만 실제 서비스를 배포할때는 runserver를 사용하지 않으므로 직접 모아주어야 하며, 이 때 사용하는 것이 collectstatic 명령이다.
collectstatic
collectstatic 파일은 프로젝트에서 사용하는 css, font, javascript 등 모든 정적 파일들을 모아서 하나의 경로에 모아준다. collectstatic을 실행하기 위해서는 먼저 파일들을 모을 경로를 지정해주어야 하며 이 경로는 settings.py 의 STATIC_ROOT 라는 변수로 지정한다.
프로젝트 루트의 상위 폴더에 static 라는 폴더를 생성하고 그곳으로 모든 정적 파일들을 모으도록 설정하였다.
static <– collectstatic을 실행하면 생성될 폴더
Django App의 Static 폴더
필요에 따라 각각의 Django App마다 App별 정적 파일을 담는 별도의 “static” 폴더를 둘 수도 있다. 이를 위해서는 settings.py 파일 안에 STATICFILES_FINDERS을 설정하고 그 값으로 AppDirectoriesFinder을 추가해 주어야 한다. 각 App의 static 폴더는 그 폴더명을 “static” 으로 지정해 주어야 하며, 일반적으로 App명/static/App명 과 같이 각 App의 static 폴더 안에 다시 “App명”” 서브폴더를 둘 것을 권장한다. 이는 Deployment 시 collectstatic 을 실행할 때, 각 static 폴더 밑의 내용을 그대로 복사하므로 동명 파일들이 충돌하지 않게 하기 위함이다.
참고로 위의 FileSystemFinder는 STATICFILES_DIRS 에 있는 경로들로부터 정적 파일을 찾을 수 있게 한다.
Static 파일 사용
Static 파일들은 주로 템플릿에서 사용되는데, settings.py 설정을 마친 후 static 파일들을 사용하기 위해서는, 템플릿 상단에 `{% load staticfiles %}` 태그를 먼저 명시해 주어야 한다. 그리고, 실제 static 파일을 가리키기 위해서는 아래 link 태그에서 보이듯이 `{% static '리소스명' %}` 와 같이 static 템플릿 태그를 사용하여 해당 리소스를 지정한다. 이때 리소스명에는 "static/" 폴더명 다음의 경로만 지정한다.
Django 프로젝트를 Deploy할 때, 흩어져 있는 Static 파일들을 모아 특정 디렉토리로 옮기는 작업을 할 수 있는데, 이 작업은 위해 “./manage.py collectstatic” 명령을 사용한다. 즉, collectstatic 명령은 Django 프로젝트와 각 Django App 안에 있는 Static 파일들을 settings.py 파일 안에 정의되어 있는 STATIC_ROOT 디렉토리로 옮기는 작업을 수행한다.
예를 들어, settings.py 에 다음과 같이 STATIC_ROOT 가 설정되어 있을 때,
1
STATIC_ROOT = '/var/www/myweb_static'
아래 collectstatic 명령은 모든 정적 파일들을 /var/www/myweb_static 디렉토리에 복사해 준다.
Tip: python3 manage.py runserver --insecure 명령을 하면 로컬에서 static파일 서비스 가능
로그인 구현
폼 구현할떄 확인후 해당 값들 다시 html css로 적용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
질문에서, 나는 파이썬 폼 클래스 대신 HTML 템플릿의 모양과 느낌을 변경하고 싶다고 가정합니다. 이 경우 기본 django-auth 형식에 필요한 이름과 id 속성이 일치하는 입력 유형 필드 만 포함하면됩니다. 다음 단계를 사용하여이를 달성 할 수 있습니다.
{{form.as_p}}를 사용하여 지금 렌더링 할 때 템플릿을 렌더링하십시오. 요소를 검사하고 기본 인증 양식으로 생성 된 사용자 이름, 비밀번호 및 제출 단추 이름 및 ID를 확인하십시오. 나만의 커스텀 스타일을 사용하여 동일한 태그를 재생성하십시오. 다음과 비슷한 내용이 있습니다.
<form method="POST"> {% csrf_token %} <input type="input" class="form-control" name="username" id="inputEmail" placeholder="Username" required > <input type="password" class="form-control" name="password" id="inputPass" placeholder="Password" required> <button type="submit" style="opacity: 1 !important;">Login</button> <a href="/password_reset">Reset Password</a> </form> 이 후 당신은 당신의 상상력을 사용하고 요구 사항에 따라 로그인 양식을 디자인 할 수 있습니다.
도움이 되었기를 바랍니다.
오류코드는 반드시확인하자
계속 회원가입 시도했지만,. 원점으로 돌아왔다
form.errors를 찍어보니, 비번과 이름이 비슷해서 안된다고 오류가 뜨더라,,제발
오류코드 확인하자
1 2 3 4 5 6
# template에서
{% for field in form %} {{ field.errors }} {% endfor %}
이미지가 저장될 위치를 세팅합니다. 저의 경우는 root 폴더와 동등한 위치에 .media 폴더를 만들고, 안에 저장시키려고 합니다. 모델에서 image_file 필드의 upload_to를 items로 지정해놓았으니 최종적으로 이미지가 저장되는 위치는 .media/items/~~~~ 가 될 것입니다.(upload_to를 지정해주는것이 파일관리용이)