값을 변경하든, dd를 찍어보든 할 때 분명 코드 변경한 거 저장했지만 브라우저에서 새로고침하면 적용이 안 되더라구요...

그래서 분명 고쳤는데 계속 오류떠서 시간을 허비한 적이 있습니다. 

그래서 도움을 많이 구했는데

라라벨이 자꾸 캐시에서 값을 읽어오는 것 같다고 해서 어떻게 해야할 지 몰랐는데 

원래 개발할 때는 php opcache를 꺼야하는 거래서

https://itlove.tistory.com/1679

 

PHP 기초 강좌 4. Bitnami php 캐시 설정 끄기 ( WAMP , 새로고침 )

php 파일을 업로드 했는데, 수정한 php가 웹페이지에서 바로 적용되지 않아서 곤혹스러울때가 있다. 브라우저의 임시파일을 제거하고, 파일 경로에 랜덤변수를 붙여 보아도 안되는 경우가 있다

itlove.tistory.com

 

여기서 optimize 끄고 나서

composer dump-autoload
php artisan cache:clear
php artisan optimize
php artisan config:clear
php artisan config:cache

이거 그냥 다 치고 다시 접속하면 된다고 해서 그대로 했습니다.

저는 실행해 봤을 때 새로고침 하면 반영이 다시 잘 되었어요.!!!

 

phpStorm이 문제가 아니라 환경설정이 문제였던 것..!!!!!

 

넘나 힘든 것...

저희 반 사람들은 다 vs코드 써서 아무도 방법을 모르는데다가

키워드를 제대로 검색 못 해서 그런지 해결방법도 전혀 안 뜨고 그랬네요

모쪼록 파이팅!

'백엔드 > laravel' 카테고리의 다른 글

laravel - database  (0) 2021.11.18
laravel - 라라벨 개념 이해  (0) 2021.11.18
[#1] 아키텍처 개념 - laravel  (0) 2021.11.18
laravel - breeze 적용 안 되는 문제발생  (0) 2021.09.14
laravel  (0) 2021.08.02

내가 원하는 거

실제 내가 한 것

① breeze설치

-> 로그인/회원가입 생성됨

 breeze설치

-> 적용안됨ㅎ  

 

 

모든 경로는 rotues/auth.php내에서 설정됨.

 

문서상 -> 밑의 코드대로 설치하면 routes/auth.php에서 애플리케이션/login 또는 /registerURL로 이동 가능

그래서 오른쪽 상단에 회원가입/로그인 링크만들어 져야함.

composer require laravel/breeze --dev
php artisan breeze:install

npm install
npm run dev
php artisan migrate

 

정상적 : 오른쪽 상단에 회원가입/로그인 링크 만들어져야함.

 

 


이게 왜 이럴까?....☆

하하핳 아이코야

분명 코드 몇줄밖에 안 뜨는데 문제가 생겨버렸어욥.

blade 파일 있는 거 보니까 설치도 다 됐고... 콘솔에도 문제가 없었고, 캐시도 다 지워봤지만 해결은 안 됨.

routes/auth.php 파일!

다행히 해결이 되어서 또 기록!

1. web.php랑 라우터랑 확인

php artisan route:list

위의 코드를 콘솔에 치면 오른쪽 사진처럼 목록이 나오는데 현재 route에 연결리스트를 확인 가능.

-> 자, 두 개를 보니까 뭔가 좀 부족해요. dashboard부분도 없고.. 먼저 web.php를 만지긴 했는데.. 연결이 안 되어있죠?

 

auth 라우트에서 인식을 못 하고 있으니까 라우터 캐시를 삭제! 

php artisan route:clear

 

그리고 다시 route:list 

 

오른쪽 상단 보이죠.. 이제 라우터도 인식이 제대로 되고 있어요

 

'백엔드 > laravel' 카테고리의 다른 글

laravel - database  (0) 2021.11.18
laravel - 라라벨 개념 이해  (0) 2021.11.18
[#1] 아키텍처 개념 - laravel  (0) 2021.11.18
laravel8 - phpStorm에서 새로고침 반영 안 됨.  (0) 2021.09.16
laravel  (0) 2021.08.02

[수업 목표]

  1. 파이썬 기초 문법을 안다.
  2. 원하는 페이지를 크롤링 할 수 있다.
  3. pymongo를 통해 mongoDB를 제어할 수 있다

 

설치!
    1. Python
    2. mongoDB
    3. Robo3T
    4. (윈도우만!) Git bash
    파이썬 기초

파이썬을 설치? -> 번역팩을 설치한다고 이해

    • tuple과 set 자료형, class는 기초 단계에선 다루지 않음. 나중에 필요한 일이 생겼을 때 배워야 의미를 알 수있음
 파이썬 기초공부
  • 변수 & 기본연산
  •  
  • a = 3 # 3을 a에 넣는다 b = a # a를 b에 넣는다 a = a + 1 # a+1을 다시 a에 넣는다 num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다 num2 = 99 # 99의 값을 num2이라는 변수에 넣는다 # 변수의 이름은 마음대로 지을 수 있음! # 진짜 "마음대로" 짓는 게 좋을까? var1, var2 이렇게?​
  • 자료형
  • # 숫자, 문자형
    
    name = 'bob' # 변수에는 문자열이 들어갈 수도 있고,
    num = 12 # 숫자가 들어갈 수도 있고,
    
    is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.
    # 리스트 형 (Javascript의 배열형과 동일)
    
    name = 'bob' # 변수에는 문자열이 들어갈 수도 있고,
    num = 12 # 숫자가 들어갈 수도 있고,
    
    is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.
    
    #########
    # 그리고 List, Dictionary 도 들어갈 수도 있죠. 그게 뭔지는 아래에서!
  • # Dictionary 형 (Javascript의 dictionary형과 동일)
    
    a_dict = {}
    a_dict = {'name':'bob','age':21}
    a_dict['height'] = 178
    
    # a_dict의 값은? {'name':'bob','age':21, 'height':178}
    # a_dict['name']의 값은? 'bob'
    # a_dict['age']의 값은? 21
    # a_dict['height']의 값은? 178
  • # Dictionary 형과 List형의 조합
    
    people = [{'name':'bob','age':20},{'name':'carry','age':38}]
    
    # people[0]['name']의 값은? 'bob'
    # people[1]['name']의 값은? 'carry'
    
    person = {'name':'john','age':7}
    people.append(person)
    
    # people의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
    # people[2]['name']의 값은? 'john'
  • 함수
    # 수학문제에서
    f(x) = 2*x+3
    y = f(2)
    y의 값은? 7
    
    # 참고: 자바스크립트에서는
    function f(x) {
    	return 2*x+3
    }
    
    # 파이썬에서
    def f(x):
    	return 2*x+3
    
    y = f(2)
    y의 값은? 7
    #함수의 응용
    
    
    def sum_all(a,b,c):
    	return a+b+c
    
    def mul(a,b):
    	return a*b
    
    result = sum_all(1,2,3) + mul(10,10)
    
    # result라는 변수의 값은?
  • 조건문
    def oddeven(num):  # oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
    	if num % 2 == 0: # num을 2로 나눈 나머지가 0이면
    		 return True   # True (참)을 반환한다.
    	else:            # 아니면,
    		 return False  # False (거짓)을 반환한다.
    
    result = oddeven(20)
    # result의 값은 무엇일까요?
  • def is_adult(age):
    	if age > 20:
    		print('성인입니다')    # 조건이 참이면 성인입니다를 출력
    	else:
    		print('청소년이에요')  # 조건이 거짓이면 청소년이에요를 출력
    
    is_adult(30)
    # 무엇이 출력될까요?
  • 반복문
    fruits = ['사과','배','감','귤']
    
    for fruit in fruits:
    	print(fruit)
    
    # 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.
    #리스트 예제
    
    
    fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
    
    count = 0
    for fruit in fruits:
    	if fruit == '사과':
    		count += 1
    
    print(count)
    
    # 사과의 갯수를 세어 보여줍니다.
    def count_fruits(target):
    	count = 0
    	for fruit in fruits:
    		if fruit == target:
    			count += 1
    	return count
    
    subak_count = count_fruits('수박')
    print(subak_count) #수박의 갯수
    
    gam_count = count_fruits('감')
    print(gam_count) #감의 갯수
    #딕셔너리 예제
    
    
    people = [{'name': 'bob', 'age': 20}, 
              {'name': 'carry', 'age': 38},
              {'name': 'john', 'age': 7},
              {'name': 'smith', 'age': 17},
              {'name': 'ben', 'age': 27}]
    
    # 모든 사람의 이름과 나이를 출력해봅시다.
    for person in people:
        print(person['name'], person['age'])
    
    
    # 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다.
    # 이름을 받으면, age를 리턴해주는 함수
    def get_age(myname):
        for person in people:
            if person['name'] == myname:
                return person['age']
        return '해당하는 이름이 없습니다'
    
    
    print(get_age('bob'))
    print(get_age('kay'))
패키지 설치 및 사용

파이썬 패키지

패키지? 라이브러리? → Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위
패키지 의 묶음을 라이브러리
지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치!
    1. 가상 환경(virtual environment) 이란? - 프로젝트별로 패키지들을 담을 공구함
    2. pip(python install package) 사용 - requests 패키지 설치해보기
  • 즉, 여기서는 패키지 설치 = 외부 라이브러리 설치!

패키지 사용

import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']

for gu in gus:
	print(gu['MSRSTE_NM'], gu['IDEX_MVL'])
  •  

패키지 사용 - (웹스크랩핑 기초)

패키지 추가 설치하기(beautifulsoup4)

import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        # a의 text를 찍어본다.
        print (a_tag.text)

선택하는 법!!

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

 

**. DB설치 확인**

    1. DB 설치 확인
    크롬 창에 localhost:27017 이라고 쳤을 때, 화면이 잘 나오는 지 확인

 

  • robo 3T의 역할데이터를 저장했는데 눈으로 보이진 않고.. 답답하겠죠?참고) 우리 눈에는 안보이지만(=GUI는 없지만) 컴퓨터에서 돌아가는 프로그램들은 무척 많으니, 너무 놀라지 마세요~!
    • 그래서 DB내부를 살펴보기 위한 프로그램을 따로 설치해야해요. → 이것이 바로 robo3T의 역할!
    • mongoDB라는 프로그램은 참 특이한 친구예요. 눈으로 보이지 않는답니다. 유식한 말로, 그래픽인터페이스(=GUI)를 제공하지 않는다고 표현합니다.
    • robo3T 세팅하기
    • 아래처럼 준비해서 robo3T에서 DB 볼 세팅을 미리 해둡니다! (sparta-local-DB는 아무 이름이나 입력해도 됩니다)
    • db, collection, documents(각 데이터들을 지칭)를 확인 가능합니다.
    • 지금은 System, config 외엔 아무것도 없죠? 조금 이따 데이터를 넣으면 아래처럼 보일거예요!

11. DB개괄

    1. 들어가기 전에 : DB의 두 가지 종류
    Database에는, 크게 두 가지 종류가 있습니다.RDBMS(SQL)ex) MS-SQL, My-SQL 등딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
  • ex) MongoDB
  • No-SQL
  • 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.

pymongo로 DB조작하기

패키지 추가 설치하기(pymongo )

 

 

pymongo 역할

예를 들어, MS Excel를 파이썬으로 조작하려면, 특별한 라이브러리가 필요하지 않겠어요?

마찬가지로, mongoDB 라는 프로그램을 조작하려면, 특별한 라이브러리, pymongo가 필요하답니다!

  •  
insert - DB연결 및 데이터 넣기
from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # 'dbsparta'라는 이름의 db를 만듭니다.

# MongoDB에 insert 하기

# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})
find - 모든 결과값 보기
from pymongo import MongoClient           # pymongo를 임포트 하기(패키지 인스톨 먼저 해야겠죠?)
client = MongoClient('localhost', 27017)  # mongoDB는 27017 포트로 돌아갑니다.
db = client.dbsparta                      # 'dbsparta'라는 이름의 db를 만듭니다.

# MongoDB에서 데이터 모두 보기
all_users = list(db.users.find({}))

# 참고) MongoDB에서 특정 조건의 데이터 모두 보기
same_ages = list(db.users.find({'age':21},{'_id':False}))

print(all_users[0])         # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기

for user in all_users:      # 반복문을 돌며 모든 결과값을 보기
    print(user)
find_one - 특정 결과값 뽑아보기
user = db.users.find_one({'name':'bobby'})
print(user)
update_one - 수정하기
# 생김새
db.people.update_many(찾을조건,{ '$set': 어떻게바꿀지 })

# 예시 - 오타가 많으니 이 줄을 복사해서 씁시다!
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

user = db.users.find_one({'name':'bobby'})
print(user)
delete_one - 삭제하기
db.users.delete_one({'name':'bobby'})

user = db.users.find_one({'name':'bobby'})
print(user)
총정리
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
  •  

'블렌디드 러닝' 카테고리의 다른 글

2주차 - jQuery, Ajax  (0) 2021.06.05
1주차 - 왕초보  (0) 2021.06.05

- 라라벨 설치

https://laravel.com/docs/8.x/installation

 

Laravel - The PHP Framework For Web Artisans

Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.

laravel.com

- 라라벨 프로젝트 생성

laravel new buybyschool_api

- 프로젝트로 가기

cd buybyschool_api

- 서버 실행

php artisan serve

 

- 모델(디비) 생성 & 마이그레이션

php artisan make:model buybyschool -m

make:model : 모델을 만든다

buybyschool : 모델 이름

-m : 마이그레이션 옵션


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
    	// 테이블 생성
        Schema::create('buybyschools', function (Blueprint $table) {
            $table->id(); // 자동 증가 함수, id컬럼
            // 이 사이에 내가 필요한 컬럼을 추가해주면 됩니다!
            
            
            $table->timestamps(); // timestamps, created_at, updated_at이 기본으로 설정됨.
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('buybyschools');
    }
};

-> up 메서드, down 메서드는 각각 마이그레인션 및 롤백 할 때 실행됩니다.

up 메소드는 새 테이블, 열 또는 인덱스를 추가하는데 사용 -> php artisan migrate 명령어를 치면 up 메서드가 실행됨.

down 메소드는 rollback 시에 사용 -> artisan migrate:rollback 명령어를 치면 down메서드가 실행됨

 

[수업 목표]

  1. Javascript 문법에 익숙해진다.
  2. jQuery로 간단한 HTML을 조작할 수 있다.
  3. Ajax로 서버 API(약속)에 데이터를 주고, 결과를 받아온다.

 

JQuery 다루기

jQuery는 javascript 로 작성된 라이브러리

html의 head에 넣어두고 사용

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

 

문법  

$('선택요소').동작함수();

val() - 변수값 들고오기

hide() - 숨기기

show() - 보여주기

text() - 텍스트 넣기

css('display') - css의 display값 

 

문서가 로딩되면 실행

$(document).ready(function() {

    제이쿼리 코드;

});

 

API는 은행창구!?!

예금 창구에서 고객이냐, 기업이냐에 따라

가져와야하는 것, 처리해주어야하는 것이 구분

=> 클라이언트가 요청할 때도 "타입"이 존재

 

GET - 데이터 조회를 요청할 때

POST - 데이터 생성, 변경, 삭제를 요청할 때

 

ajax

ajax는 jQuery를 import한 페이지에서만 동작가능

$.ajax({
  type: "GET", // GET 방식으로 요청한다.
  url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
  data: {}, // 요청하면서 함께 줄 데이터 (GET 요청시엔 비워두세요)
  success: function(response){ // 서버에서 준 결과를 response라는 변수에 담음
    console.log(response) // 서버에서 준 결과를 이용해서 나머지 코드를 작성
  }
})

 

전의 숙제 리펙토링!

 

결과물!

 

'블렌디드 러닝' 카테고리의 다른 글

3주차 - 왕초보  (0) 2021.08.02
1주차 - 왕초보  (0) 2021.06.05

수강목적

이브와 멘토링을 하면서 블렌디드 러닝을 알게 되었고, 이 강의를 통해 나의 스킬을 '업'  하기 위해서 왕초보 시작반을 들었다.

 

1. 배운 것

웹의 동작원리를 알고 시작해서 언어를 활용할 때 더욱 도움이 되었고 HTML, css, javascript 등의 언어를 배웠다. 폰트적용이나 디자인이 되어 있는 것들을 사용할 수 있는 사이트들을알게 되었고, 이를 활용하여 과제물을 만드는데 css를 잘 적용하기 위해서 어떤 걸 써서 적용하면 되는지 간단히 알려줘서 스스로 만들어 낼 수 있었던 것 같다. 

 

결과물

 

 

 

유용한 사이트

https://getbootstrap.com/docs/4.0/components/alerts/

 

Alerts

Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.

getbootstrap.com

https://fonts.google.com/?subset=korean 

 

Google Fonts

Making the web more beautiful, fast, and open through great typography

fonts.google.com

 

'블렌디드 러닝' 카테고리의 다른 글

3주차 - 왕초보  (0) 2021.08.02
2주차 - jQuery, Ajax  (0) 2021.06.05

+ Recent posts