최  호민

최 호민

1678976100

Quarkus로 사용자 지정 유효성 검사기를 만드는 방법

이 turoail에서는 Quarkus Java 프레임워크에서 코드 예제 및 단위 테스트를 사용하여 사용자 지정 유효성 검사기를 만드는 방법을 배웁니다. Quarkus는 다양한 기본 제공 유효성 검사를 제공하고 사용자 지정 유효성 검사 추가를 지원하는 전체 스택 Java 프레임워크입니다.

Quarkus는 클라우드 네이티브 컨테이너화된 애플리케이션을 구축하기 위해 설계된 오픈 소스 풀스택 Java 프레임워크입니다. Quarkus는 클라우드 애플리케이션용으로 제작되었기 때문에 가볍고 빠르게 설계되었으며 빠른 시작 시간을 지원합니다. 잘 설계된 컨테이너화된 애플리케이션은 데이터 생성 및 액세스를 위한 안정적인 REST API 구현을 용이하게 합니다.

데이터 유효성 검사는 개발자가 항상 나중에 생각하지만 데이터를 일관되고 유효하게 유지하는 데 중요합니다. REST API는 수신한 데이터의 유효성을 검사해야 하며 Quarkus는 REST API 요청 개체의 유효성을 검사하기 위한 풍부한 내장 지원을 제공합니다. 데이터 개체의 사용자 지정 유효성 검사가 필요한 상황이 있습니다. 이 문서에서는 Quarkus 프레임워크를 사용하여 사용자 지정 유효성 검사기를 만드는 방법을 설명합니다.

REST API 예제

새 House를 생성하기 위해 House 데이터 개체와 REST API가 있는 아래의 간단한 예를 살펴보겠습니다. 

다음 필드를 확인해야 합니다.

  • number: null이 아니어야 합니다.
  • street: 비워둘 수 없습니다.
  • state: 캘리포니아(CA)와 네바다(NV)만 해당되어야 합니다.
class House {

	String number;
	
	String street;

	String city;

	String state;

	String type;

}

그리고 REST API:

@Path("/house")
public class HouseResource {

@POST
    public String createHouse(House house) {
      // Additional logic to process the house object
        return "Valid house created";
    }
}

Quarkus 유효성 검사기 구성

Quarkus는 데이터 유효성 검사를 수행하기 위해 Hibernate 유효성 검사기를 제공합니다. 이것은 Quarkus 확장이며 프로젝트에 추가해야 합니다.

Maven 프로젝트의 경우 다음 항목에 종속성을 추가합니다 pom.xml.

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

Gradle 기반 프로젝트 의 경우 다음을 사용하여 다음을 수행합니다 build.gradle.

implementation("io.quarkus:quarkus-hibernate-validator")

내장 유효성 검사기

일반적으로 사용되는 유효성 검사기는 데이터 개체에 쉽게 추가할 수 있는 주석으로 사용할 수 있습니다. House 데이터 개체에서 number 속성이 null이 아니어야 하고 거리가 비어 있지 않아야 합니다. @NotNull주석 과 다음을 사용합니다 @NotBlank.

class House {

	@NotNull
	int number;
	
	@NotBlank(message = "House street cannot be blank")
	String street;

	String city;

	String state;

	String type;
}

REST API에서 데이터 개체의 유효성을 검사하려면 주석을 포함해야 합니다 @Valid. 이렇게 하면 수동 유효성 검사가 필요하지 않으며 모든 유효성 검사 오류로 인해 400 HTTP 응답이 호출자에게 반환됩니다.

@Path("/house")
public String createHouse(@Valid House house) {
        return "Valid house received";
    }

맞춤 유효성 검사

기본 유효성 검사가 불충분한 몇 가지 시나리오가 있으며 데이터에 대한 사용자 지정 유효성 검사 형식을 구현해야 합니다. 이 예에서 하우스 데이터는 캘리포니아(CA)와 네바다(NV)에서만 지원됩니다. 이에 대한 유효성 검사기를 만들어 봅시다.

@Retention(RetentionPolicy.RUNTIME)
@Target({
    ElementType.FIELD
})
@Constraint(validatedBy = StateValidator.class)
public @interface ValidState {

    String message() default "State not supported";

    Class<? extends Payload>[] payload() default {};

    Class<?>[] groups() default {};
    
}

세부 사항 알아보기: 

  • 유효성 검사기의 이름은 입니다 ValidState. 클래스 유효성 검사에서 이것은 @ValidState.
  • 기본 오류 메시지가 message()메서드에 추가됩니다.
  • 이 주석은 유효성이 검증되고 주석을 StateValidator.class사용하여 연결됩니다 @Constraint.
  • 주석은 Java@Target 프로그램 에서 주석이 나타날 수 있는 위치를 나타냅니다 . 위의 경우에만 적용할 수 있습니다 .Fields
  • @Retention주석에 대한 보존 정책을 설명합니다 . 위의 예에서 주석은 런타임 중에 유지됩니다.

클래스 의 유효성 검사 논리 StateValidator:

public class StateValidator implements ConstraintValidator<ValidState, String> {

    List<String> states = List.of("CA", "NV");
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value != null && states.contains(value);
    }
    
}

사용자 지정 유효성 검사기는 @ValidStateHouse 클래스에 포함될 수 있습니다.

class House {

	@NotNull
	int number;
	
	@NotBlank(message = "House street cannot be blank")
	String street;

	String city;

	@ValidState
	String state;

	String type;
}

테스트

소프트웨어 개발에서 단위 테스트는 코드 품질 향상 및 개발 주기 초기에 결함 감지와 같은 여러 이점을 제공하는 중요한 구성 요소입니다. Quarkus 프레임워크는 개발자의 단위 테스트를 지원하는 다양한 도구를 제공합니다. 

사용자 지정 유효성 검사기의 단위 테스트는 Quarkus에서 유효성 검사기를 주입하고 House 개체에 대한 수동 유효성 검사를 수행할 수 있으므로 간단합니다.

@QuarkusTest
public class HouseResourceTest {
@Inject
 Validator validator;

@Test
    public void testValidState() {
        House h = new House();
        h.state = "CA";
        h.number = 1;
        h.street = "street1";
        Set<ConstraintViolation<House>> violations = validator.validate(h);
        System.out.println("Res " + violations);
        assertEquals(violations.size(), 0);
    }

    @Test
    public void testInvalidState() {
        House h = new House();
        h.state = "WA";
        h.number = 1;
        Set<ConstraintViolation<House>> violations = validator.validate(h);
        assertEquals(violations.size(), 1);
        assertEquals(violations.iterator().next().getMessage(), "State not supported");
    }	
	
}

결론

Quarkus는 다양한 기본 제공 유효성 검사를 제공하고 사용자 지정 유효성 검사 추가를 지원하는 강력하고 잘 작성된 프레임워크입니다. 유효성 검사기는 REST API 유효성 검사를 수행하는 깨끗하고 편리한 방법을 제공하며 이는 DRY 방법론을 지원합니다. 모든 서비스는 처리하는 데이터를 정의하고 유효성 검사를 요구하기 때문에 유효성 검사는 마이크로 서비스 아키텍처에서 점점 더 중요한 역할을 합니다. 위의 문서에서는 기본 제공 및 사용자 지정 유효성 검사기를 사용하는 프로세스를 설명합니다.

출처: https://dzone.com

#quarkus #java

What is GEEK

Buddha Community

Quarkus로 사용자 지정 유효성 검사기를 만드는 방법
최  호민

최 호민

1678976100

Quarkus로 사용자 지정 유효성 검사기를 만드는 방법

이 turoail에서는 Quarkus Java 프레임워크에서 코드 예제 및 단위 테스트를 사용하여 사용자 지정 유효성 검사기를 만드는 방법을 배웁니다. Quarkus는 다양한 기본 제공 유효성 검사를 제공하고 사용자 지정 유효성 검사 추가를 지원하는 전체 스택 Java 프레임워크입니다.

Quarkus는 클라우드 네이티브 컨테이너화된 애플리케이션을 구축하기 위해 설계된 오픈 소스 풀스택 Java 프레임워크입니다. Quarkus는 클라우드 애플리케이션용으로 제작되었기 때문에 가볍고 빠르게 설계되었으며 빠른 시작 시간을 지원합니다. 잘 설계된 컨테이너화된 애플리케이션은 데이터 생성 및 액세스를 위한 안정적인 REST API 구현을 용이하게 합니다.

데이터 유효성 검사는 개발자가 항상 나중에 생각하지만 데이터를 일관되고 유효하게 유지하는 데 중요합니다. REST API는 수신한 데이터의 유효성을 검사해야 하며 Quarkus는 REST API 요청 개체의 유효성을 검사하기 위한 풍부한 내장 지원을 제공합니다. 데이터 개체의 사용자 지정 유효성 검사가 필요한 상황이 있습니다. 이 문서에서는 Quarkus 프레임워크를 사용하여 사용자 지정 유효성 검사기를 만드는 방법을 설명합니다.

REST API 예제

새 House를 생성하기 위해 House 데이터 개체와 REST API가 있는 아래의 간단한 예를 살펴보겠습니다. 

다음 필드를 확인해야 합니다.

  • number: null이 아니어야 합니다.
  • street: 비워둘 수 없습니다.
  • state: 캘리포니아(CA)와 네바다(NV)만 해당되어야 합니다.
class House {

	String number;
	
	String street;

	String city;

	String state;

	String type;

}

그리고 REST API:

@Path("/house")
public class HouseResource {

@POST
    public String createHouse(House house) {
      // Additional logic to process the house object
        return "Valid house created";
    }
}

Quarkus 유효성 검사기 구성

Quarkus는 데이터 유효성 검사를 수행하기 위해 Hibernate 유효성 검사기를 제공합니다. 이것은 Quarkus 확장이며 프로젝트에 추가해야 합니다.

Maven 프로젝트의 경우 다음 항목에 종속성을 추가합니다 pom.xml.

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

Gradle 기반 프로젝트 의 경우 다음을 사용하여 다음을 수행합니다 build.gradle.

implementation("io.quarkus:quarkus-hibernate-validator")

내장 유효성 검사기

일반적으로 사용되는 유효성 검사기는 데이터 개체에 쉽게 추가할 수 있는 주석으로 사용할 수 있습니다. House 데이터 개체에서 number 속성이 null이 아니어야 하고 거리가 비어 있지 않아야 합니다. @NotNull주석 과 다음을 사용합니다 @NotBlank.

class House {

	@NotNull
	int number;
	
	@NotBlank(message = "House street cannot be blank")
	String street;

	String city;

	String state;

	String type;
}

REST API에서 데이터 개체의 유효성을 검사하려면 주석을 포함해야 합니다 @Valid. 이렇게 하면 수동 유효성 검사가 필요하지 않으며 모든 유효성 검사 오류로 인해 400 HTTP 응답이 호출자에게 반환됩니다.

@Path("/house")
public String createHouse(@Valid House house) {
        return "Valid house received";
    }

맞춤 유효성 검사

기본 유효성 검사가 불충분한 몇 가지 시나리오가 있으며 데이터에 대한 사용자 지정 유효성 검사 형식을 구현해야 합니다. 이 예에서 하우스 데이터는 캘리포니아(CA)와 네바다(NV)에서만 지원됩니다. 이에 대한 유효성 검사기를 만들어 봅시다.

@Retention(RetentionPolicy.RUNTIME)
@Target({
    ElementType.FIELD
})
@Constraint(validatedBy = StateValidator.class)
public @interface ValidState {

    String message() default "State not supported";

    Class<? extends Payload>[] payload() default {};

    Class<?>[] groups() default {};
    
}

세부 사항 알아보기: 

  • 유효성 검사기의 이름은 입니다 ValidState. 클래스 유효성 검사에서 이것은 @ValidState.
  • 기본 오류 메시지가 message()메서드에 추가됩니다.
  • 이 주석은 유효성이 검증되고 주석을 StateValidator.class사용하여 연결됩니다 @Constraint.
  • 주석은 Java@Target 프로그램 에서 주석이 나타날 수 있는 위치를 나타냅니다 . 위의 경우에만 적용할 수 있습니다 .Fields
  • @Retention주석에 대한 보존 정책을 설명합니다 . 위의 예에서 주석은 런타임 중에 유지됩니다.

클래스 의 유효성 검사 논리 StateValidator:

public class StateValidator implements ConstraintValidator<ValidState, String> {

    List<String> states = List.of("CA", "NV");
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value != null && states.contains(value);
    }
    
}

사용자 지정 유효성 검사기는 @ValidStateHouse 클래스에 포함될 수 있습니다.

class House {

	@NotNull
	int number;
	
	@NotBlank(message = "House street cannot be blank")
	String street;

	String city;

	@ValidState
	String state;

	String type;
}

테스트

소프트웨어 개발에서 단위 테스트는 코드 품질 향상 및 개발 주기 초기에 결함 감지와 같은 여러 이점을 제공하는 중요한 구성 요소입니다. Quarkus 프레임워크는 개발자의 단위 테스트를 지원하는 다양한 도구를 제공합니다. 

사용자 지정 유효성 검사기의 단위 테스트는 Quarkus에서 유효성 검사기를 주입하고 House 개체에 대한 수동 유효성 검사를 수행할 수 있으므로 간단합니다.

@QuarkusTest
public class HouseResourceTest {
@Inject
 Validator validator;

@Test
    public void testValidState() {
        House h = new House();
        h.state = "CA";
        h.number = 1;
        h.street = "street1";
        Set<ConstraintViolation<House>> violations = validator.validate(h);
        System.out.println("Res " + violations);
        assertEquals(violations.size(), 0);
    }

    @Test
    public void testInvalidState() {
        House h = new House();
        h.state = "WA";
        h.number = 1;
        Set<ConstraintViolation<House>> violations = validator.validate(h);
        assertEquals(violations.size(), 1);
        assertEquals(violations.iterator().next().getMessage(), "State not supported");
    }	
	
}

결론

Quarkus는 다양한 기본 제공 유효성 검사를 제공하고 사용자 지정 유효성 검사 추가를 지원하는 강력하고 잘 작성된 프레임워크입니다. 유효성 검사기는 REST API 유효성 검사를 수행하는 깨끗하고 편리한 방법을 제공하며 이는 DRY 방법론을 지원합니다. 모든 서비스는 처리하는 데이터를 정의하고 유효성 검사를 요구하기 때문에 유효성 검사는 마이크로 서비스 아키텍처에서 점점 더 중요한 역할을 합니다. 위의 문서에서는 기본 제공 및 사용자 지정 유효성 검사기를 사용하는 프로세스를 설명합니다.

출처: https://dzone.com

#quarkus #java

Duck Hwan

1676627520

React를 사용하여 사용자 지정 뒤로 버튼을 만드는 방법

이 튜토리얼에서는 React Router 6(최신 버전)을 사용하는 React 애플리케이션에서 사용자 지정 뒤로 버튼을 구현하는 방법을 배웁니다 . React Router 6을 사용하여 React 앱에서 사용자 지정 뒤로 버튼을 구현하기 위해 다음 예제를 단계별로 살펴보겠습니다.

1. 완전히 새로운 React 프로젝트를 만듭니다.

npx create a custom back button using react

2. React Router Dom 설치 :

npm i react-router-dom

3. src/App.js 파일 에서 모든 기본 코드를 제거하고 다음을 추가합니다(주석에서 자세한 설명을 찾을 수 있음).

// src/App.js
import {
  BrowserRouter,
  Routes,
  Route,
  Link,
  useNavigate,
} from 'react-router-dom';
import './App.css';

// App component
function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path='/' element={<HomePage />} />
        <Route path='/about' element={<AboutPage />} />
      </Routes>
    </BrowserRouter>
  );
}

// Home page
const HomePage = () => {
  return (
    <div className='container'>
      <h1>Codequs.com - Home Page</h1>
      {/* Use this link to go to the About page */}
      <Link to='/about'>Go to About page</Link>
    </div>
  );
};

// About page
const AboutPage = () => {
  // Use this hook to programmatically navigate to another page
  const navigate = useNavigate();

  // This function is used to navigate to the home page
  // It will be called when the button is clicked
  const goBack = () => {
    navigate(-1);
  };

  return (
    <div className='container'>
      {/* Here's our custom back button */}
      <button onClick={goBack} className='back-button'>
        &larr; Go Back
      </button>
      <h1>About Page</h1>
      <p>
        To go to the home page, you can use either the <b>blue back button</b>{' '}
        or the back button of the browser
      </p>
    </div>
  );
};

export default App;

4. 우리 프로젝트의 중요한 부분은 CSS입니다. src/App.css 에서 원하지 않는 코드를 다음으로 교체합니다.

.container {
    width: 80%;
    margin: 30px auto;
}

.back-button {
    padding: 10px 30px;
    background: #2196f3;
    color: #fff;
    font-weight: bold;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: 0.5s;
}

.back-button:hover {
    background: #0d47a1;
}

5. 실행하고 결과를 확인합니다.

npm start

행복한 코딩!!!

Duck Hwan

1660130520

HTML 및 CSS를 사용하여 사용자 프로필 카드를 만드는 방법

짧은 프로필 카드는 특정 사람의 작은 사진과 이름, 직업, 기타 사소한 세부 정보와 같은 세부 정보가 있는 카드를 의미합니다. 프로필 카드는 특정 사람의 신원으로 사용됩니다.

이 가이드에서는 HTML 및 CSS를 사용하여 사용자 프로필 카드를 만드는 방법을 배웁니다. HTML 및 CSS를 사용하여 사용자 프로필 카드를 만들려면. HTML, CSS 라는 두 개의 파일을 생성해야 합니다.

1: 먼저 HTML 파일을 만듭니다.

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-----<title>Responsive Profile Cards</title>----->
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css"/>
  </head>
  <body>
    <div class="container">
      <div class="box">
      <div class="image">
         <!-----<img src="img1.jpeg">------->
        </div>
        <div class="name_job">David Chrish</div>
        <div class="rating">
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="far fa-star"></i>
          <i class="far fa-star"></i>
          <i class="far fa-star"></i>
        </div>
        <p> Lorem ipsum dolor sitamet, stphen hawkin so adipisicing elit. Ratione disuja doloremque reiciendi nemo.</p>
        <div class="btns">
          <button>Read More</button>
          <button>Subscribe</button>
        </div>
      </div>
      <div class="box">
        <div class="image">
        <!------  <img src="img2.jpeg" alt="">--->
        </div>
        <div class="name_job">Kristina Bellis</div>
        <div class="rating">
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="far fa-star"></i>
          <i class="far fa-star"></i>
        </div>
        <p> Lorem ipsum dolor sitamet, stphen hawkin so adipisicing elit. Ratione disuja doloremque reiciendi nemo.</p>
        <div class="btns">
          <button>Read More </button>
          <button>Subscribe</button>
        </div>
      </div>
      <div class="box">
        <div class="image">
         <!---- <img src="img3.jpeg" alt="">---->
        </div>
        <div class="name_job">Stephen Marlo</div>
          <div class="rating">
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="fas fa-star"></i>
          <i class="far fa-star"></i>
        </div>
        <p> Lorem ipsum dolor sitamet, stphen hawkin so adipisicing elit. Ratione disuja doloremque reiciendi nemo.</p>
        <div class="btns">
          <button>Read More</button>
          <button>Subscribe</button>
        </div>
      </div>
    </div>
      </body>
</html>

 

2: 두 번째, CSS 파일 생성

 

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap');
*{
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  font-family: 'Poppins', sans-serif;
}
::selection{
  background: #8e44ad;
  color: #fff;
}
html,body{
  display: grid;
  height: 100%;
  place-items: center;
  background: #8e44ad;
}
.container{
  max-width: 1100px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  padding: 20px;
}
.container .box{
  width: calc(33% - 10px);
  background: #fff;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 20px 30px;
  border-radius: 5px;
}
.box .quote i{
margin-top: 10px;
font-size: 45px;
color: #17c0eb
}
.container .box .image{
  margin: 10px 0;
  height: 150px;
  width: 150px;
  background: #8e44ad;
  padding: 3px;
  border-radius: 50%;
}
.box .image img{
  height: 100%;
  width: 100%;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid #fff;
}
.box p{
  text-align: justify;
  margin-top: 8px;
  font-size: 16px;
  font-weight: 400;
}
.box .name_job{
  margin: 10px 0 3px 0;
  color: #8e44ad;
  font-size: 18px;
  font-weight: 600;
}
.rating i{
  font-size: 18px;
  color: #8e44ad;
  margin-bottom: 5px;
}
.btns{
  margin-top: 20px;
  margin-bottom: 5px;
  display: flex;
  justify-content: space-between;
  width: 100%;
}
.btns button{
  background: #8e44ad;
  width: 100%;
  padding: 9px 0px;
  outline: none;
  border: 2px solid #8e44ad;
  border-radius: 5px;
  cursor: pointer;
  font-size: 18px;
  font-weight: 400;
  color: #8e44ad;
  transition: all 0.3s linear;
}
.btns button:first-child{
  background: none;
  margin-right: 5px;
}
.btns button:last-child{
  color: #fff;
  margin-left: 5px;
}
.btns button:first-child:hover{
  background: #8e44ad;
  color: #fff;
}
.btns button:hover{
  color: #fff;
}
@media (max-width:1045px){
  .container .box{
    width: calc(50% - 10px);
    margin-bottom: 20px;
  }
}
@media (max-width:710px){
  .container .box{
    width: 100%;
  }
}

이제 HTML 및 CSS를 사용하여 사용자 프로필 카드를 성공적으로 만들었습니다.

최  호민

최 호민

1679635940

Python에서 디렉토리를 만드는 방법

Python에서 디렉터리 또는 폴더를 만듭니다. Python에서 단일 디렉터리와 하위 디렉터리가 있는 디렉터리를 만드는 방법을 알아봅니다. Python에서 중첩 디렉토리 구조 만들기

이 자습서에서는 Python에서 새 디렉터리(폴더의 다른 이름)를 만드는 방법을 배웁니다.

중첩된 디렉터리 구조를 만드는 방법도 배웁니다.

osPython에서 디렉터리로 작업하려면 먼저 운영 체제와 상호 작용할 수 있도록 프로젝트에 모듈을 포함해야 합니다 .

os모듈을 사용하면 이 문서에서 다룰 두 가지 방법도 사용할 수 있습니다.

  • os.mkdir() 메서드
  • os.makedirs() 메서드

그것에 들어가자!


Python의 메서드를 사용하여 단일 디렉토리를 만드는 방법os.mkdir()

앞에서 언급했듯이 Python에서 디렉터리를 사용하려면 먼저 모듈을 포함해야 합니다 os.

이렇게 하려면 파일 맨 위에 다음 코드 줄을 추가합니다.

import os

위의 코드를 사용하면 os.mkdir()메서드를 사용하여 새 단일 디렉터리를 만들 수 있습니다.

os.mkdir()메서드는 하나의 인수(디렉토리 경로)를 허용합니다.

import os

# specify the path for the directory – make sure to surround it with quotation marks
path = './projects'

# create new single directory
os.mkdir(path)

위의 코드는 projects현재 작업 디렉토리에 디렉토리를 생성합니다.

./현재 작업 디렉토리를 나타냅니다. 이 부분은 생략하고 경로를 지정할 때만 쓸 수 있습니다 projects. 결과는 동일합니다!

Python에서 메서드를 사용할 때 예외를 처리하는 방법os.mkdir

하지만 만들려는 디렉터리가 이미 존재한다면 어떻게 될까요? 예외 FileExistsError가 발생합니다.

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    os.mkdir(path)
FileExistsError: [Errno 17] File exists: './projects'

이 예외를 처리하는 한 가지 방법은 블록을 사용하여 파일이 이미 존재하는지 확인하는 것입니다 if..else.

import os

path = './projects'

# check whether directory already exists
if not os.path.exists(path):
  os.mkdir(path)
  print("Folder %s created!" % path)
else:
  print("Folder %s already exists" % path)

위의 예제에서는 먼저 메소드를 ./projects사용하여 디렉토리가 이미 존재하는지 여부를 확인했습니다 os.path.exists().

그렇다면 a 대신 다음 출력이 표시됩니다 FileExistsError.

Folder ./projects already exists

파일이 존재하지 않으면 projects현재 작업 디렉토리에 새 폴더가 생성되고 다음과 같은 결과가 표시됩니다.

Folder ./projects created!

또는 try/except블록을 사용하여 예외를 처리할 수 있습니다.

import os

path = './projects'

try:
    os.mkdir(path)
    print("Folder %s created!" % path)
except FileExistsError:
    print("Folder %s already exists" % path)

현재 작업 디렉터리에 폴더가 이미 있는 경우 projects오류 메시지 대신 다음과 같은 출력이 표시됩니다.

Folder ./projects already exists

Python에서 메서드를 사용하여 하위 디렉터리가 있는 디렉터리를 만드는 방법os.makedirs()

os.mkdir()메서드를 사용하면 하위 디렉터리를 만들 수 없습니다. 대신 단일 디렉토리를 생성할 수 있습니다.

중첩된 디렉토리 구조(예: 다른 디렉토리 내의 디렉토리)를 작성하려면 이 os.makedirs()메소드를 사용하십시오.

os.makedirs()하나의 인수(만들려는 전체 폴더 경로)를 허용합니다.

import os

# define the name of the directory with its subdirectories
path = './projects/games/game01'

os.makedirs(path)

위의 예에서는 projects현재 작업 디렉토리에 디렉토리를 만들었습니다.

프로젝트 내에서 또 다른 디렉토리인 games. 그리고 내부에 games또 다른 디렉토리인 games01.

결론

그리고 당신은 그것을 가지고 있습니다! 이제 Python에서 단일 디렉토리와 하위 디렉토리가 있는 디렉토리를 만드는 방법을 알았습니다.

읽어 주셔서 감사합니다. 즐거운 코딩하세요!

출처: https://www.freecodecamp.org

#python

Duck Hwan

1656589560

MySQL에서 데이터베이스를 만드는 방법

명령줄 도구를 사용하여 MySQL에서 데이터베이스를 생성해 보겠습니다.

1단계: MySQL 명령줄 도구 호출

MySQL 명령줄을 호출하려면 먼저 MySQL 서버에 로그인해야 합니다. 사용자 로 로그인하려면 root터미널에 다음 명령을 입력하고 Enter 키를 누릅니다. 비밀번호를 묻는 메시지가 표시됩니다. 암호를 입력하고 Enter 키를 누릅니다. 맞으면 mysql>프롬프트가 표시되며 이를 통해 SQL 문을 실행하고 결과를 볼 수 있습니다.

shell> mysql -u root -p

2단계: MySQL 데이터베이스 생성

이제 다음 명령을 실행하여 demo 라는 데이터베이스를 생성합니다 .

mysql> CREATE DATABASE demo;

데이터베이스가 성공적으로 생성되면 다음과 같은 출력이 표시됩니다.

Query OK, 1 row affected (0.03 sec)

이미 존재하는 데이터베이스를 생성하려고 하면 오류 메시지가 표시됩니다. MySQL에서 이것을 피하려면 다음과 같이 선택적 절을 사용할 수 있습니다 IF NOT EXISTS.

mysql> CREATE DATABASE IF NOT EXISTS demo;

3단계: 데이터베이스 선택

다음 명령을 입력하고 Enter 키를 누릅니다. "데이터베이스 변경됨" 출력이 표시됩니다 . 이제 데모 데이터베이스가 모든 향후 작업에 대한 기본 데이터베이스로 선택됩니다.

mysql> USE demo;

팁:SHOW DATABASES; MySQL 서버의 기존 데이터베이스 목록을 보려면 명령줄 에서 명령문을 실행할 수 있습니다 .