댕고의 일상 - 1

9538 단어
카탈로그
  • Django의 일상-1
  • Django에서 가장 많이 쓰는 세 가지
  • HTTPresponse
  • render
  • redirect

  • 정적 파일 관련
  • form표의 get과post
  • 신기한 리퀘스트
  • 템플릿의 값 전달 방식
  • Django 연결 데이터베이스 및 강력한 ORM
  • Django 데이터베이스 연결 사전 준비
  • ORM 문 생성 테이블
  • ORM 문의 데이터베이스에 대한 간단한 조작


  • 댕고의 일상 - 1
    딱고 중에 제일 많이 쓰는 세 가지.
    앞서 우리는 Django의 설치와 창설, 그리고 그 기본 원리를 소개했다. 이어서 우리는 Django에서 흔히 볼 수 있는 몇 가지 물건을 점차적으로 소개했다. 다음 세 가지는 보통 반환값으로 쓰인다.
    HTTPresponse
    문자열 되돌리기
    return HttpResponse('hello world~')
    
    #         ,              ,      ,      

    render
    웹 페이지를 되돌리는 데 쓰일 때, 이 용도는 비교적 크다. 예를 들어
    def reg(request):
        return render(request,'reg.html')
    # request           ,                reg.html  ,            ,              ,    ,       .

    redirect
    리디렉션, 리디렉션의 개념은 우리가 이전에 http 프로토콜을 소개했을 때 소개했기 때문에 리디렉션을 정의하면 현재 웹 페이지를 리디렉션 후의 웹 페이지로 바로 전환할 수 있다.
    def home(request):
        return redirect('https://baidu.com')
    #                        

    정적 파일 관련
    사이트에서 사용하는 정적 파일은 보통 다음과 같은 몇 가지를 포함한다. 즉, 자신이 쓴 JS, 자신이 쓴 CSS 또는 우리가 인용한 제3자 프레임워크,bootstrap,fontwesome,sweetalert 등이다.
    이전에 우리는 제3자 프레임워크를 도입할 때 cdn으로 온라인 캐시된 파일을 선택하거나 다운로드해서 로컬의 정적 파일을 사용할 수 있다는 것을 알게 되었다.여기서 우리는 정적 파일을 선택한 후에 이 정적 파일을 하나의 폴더에 통일적으로 놓아야 한다. 보통 우리는 새로 만든static라는 폴더에 놓아야 한다. 일반적인 것은 이치에 맞지 않는다.
    그러나 주의해야 할 점은 우리가 모든 정적 파일을 폴더에 던진 후에 Django는 이 경로를 정확하게 식별할 수 없다는 것이다. 우리가 html인터페이스에서 루트 디렉터리로 이 파일을 인용해도 안 되고 Django 자체를 찾을 수 없기 때문에 우리는 경로를 설정해야 한다.
    정적 파일에 대한 접근 자원을 설정하는 것은 루트 디렉터리 settings.py 파일에서 마지막으로 볼 수 있습니다.
    # settings.py      
    
    STATIC_URL = '/static/' 
    #                ,   ,                 
    #                       
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),  #      
    ]

    좋은 경로를 추가한 후에 html 파일을 도입하는 방식도 다음과 같이 바뀌어야 한다.
    # **.html  ,          
    
    {% load static %}
    
    
    #         ,               ,       .

    form 폼의 get과post
    form표는 우리가 앞부분을 익힐 때 배운 것으로 그 표준 양식은 다음과 같다.
    # action : 1. , 2. , /index,/admin , , 3. # method , get, post ,get, , , get , , get , get , : 1. get , get url? , ?username=admin&password=159789 , get , 2. get , , # , post , method post , , , . # settings.py , 'django.middleware.csrf.CsrfViewMiddleware' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

    신기한 리퀘스트
    requests는 우리가views 방법을 쓸 때 괄호 안에 전달하는 매개 변수이다. 그 가장 큰 역할은 바로 전단과 후단 데이터의 상호작용을 책임지는 것이다. 후단에서 받는 전단의 정보는 거의 모두 Requests에서 나온다. Request는 하나의 대상이고 매우 전면적이고 강한 대상이다. 우리는 이 대상을 통해 많은 것을 지적할 수 있다. 예를 들어 다음과 같다.
    request.MATE
    
    # mate          HTTP     , k:v         
    
    request.scheme
    #      ,      , http https
    
    request.path
    #      ,        ,         request.get_full_path()
    request.encoding
    #             
    request.session
    #      session,             ,          ,        http         ,               
    request.cookies
    #  session         ,     session    ,cookies    
    request.method
    #       ,GET  POST
    request.body
    #      ,             
    request.data
    #        , body  ,      ,data       
    request.POST
    #   POST        ,                ,     request.POST.get()           ,             request.POST.getlist()   
    request.GET
    #    POST    ,    GET()        

    템플릿의 값 전달 방식
    def reg(request):
        user_dict = {'name': 'jason', 'pwd': 123}
        #         1
        return render(request, 'reg.html', {'xxx': user_dict})      #   user_dict   reg.html  ,     xxx       
    
        #         2
        return render(request, 'reg.html', locals())  #                       
        # locals()       ,       ,       ,        ,     locals()     

    Django 연결 데이터베이스 및 강력한 ORM
    우리는 데이터베이스가 하나의 서비스 측이라고 여길 수 있다는 것을 알고 있다. 우리는 Navicat으로 데이터베이스를 연결할 수도 있고 cmd 창으로 데이터베이스를 조작할 수도 있다. 마찬가지로 우리는 Django를 통해 데이터베이스를 연결하고 이를 조작할 수도 있다.
    Django 데이터베이스 연결 사전 준비
  • 우선 Django의 프로필에 연결할 데이터베이스 정보를 써야 한다
  • DATABASES = {
                        'default': {
                        'ENGINE': 'django.db.backends.mysql',  #      MySQL,postgreSQL
                        'NAME': 'db1',          #      
                        'USER': 'root',         #      
                        'PASSWORD': 'root',     #      
                        'HOST': '127.0.0.1',    #       
                        'PORT': 3306,           #       
                        'CHARSET': 'utf8'       #           
                                    }
                        }
  • 그리고 Django가 기본적으로 사용하는 데이터베이스는musqldb이다. 그러나 현재 이런 도구는 거의 절판되었다. 그래서 우리는 Django에게 mysqldb가 아니라pymysql로 데이터베이스를 연결하라고 알려야 한다. 여기서 흔히 볼 수 있는 두 가지 방법이 있다.
  • Django의 프로젝트 이름__init__.py에 아래 문장
  • 을 쓰십시오
  • Django의 앱 이름__init__.py에 다음 문장
  • 을 적으세요.
    import pymysql
    pymysql.install_as_MySQLdb()

    ORM 문 생성 테이블
    Django 안의 ORM은 우리가 표를 만드는 데 도움을 줄 수 있지만 데이터베이스를 직접 만들 수 없기 때문에 우리는 먼저 수동으로 데이터베이스를 만들고 ORM을 통해 표를 만들어야 한다.
    우선 우리는 app명의models에 데이터베이스에 추가해야 하는 표를 작성해야 한다. 각종 필드를 포함하고 예는 다음과 같다.
    from django.db import models
    
    # Create your models here.
    class Userinfo(models.Model):
        #   id   Userinfo    ,id int primary key auto_increment
        # django           ,django ORM             id     
        id = models.AutoField(primary_key=True)
        #   username  , username varchar(64) CharField     max_lenth  
        # django  ORM ,  char  ,  django          char  
        username = models.CharField(max_length=64)
        #   password  , password int
        password = models.IntegerField()
        phone = models.BigIntegerField(default=110)  #               ,        ,          null,         
        addr = models.CharField(max_length=64, null=True)  #        
    
    
    class Book(models.Model):
        title = models.CharField(max_length=64)
    

    상술한 종류를 정의한 후에 우리는 다음과 같은 두 문장을 통해 표를 진정으로 만들 수 있다
    #         cmd  ,     Pycharm   Terminal      ,      ,           
    python manage.py makemigrations #     ,         ,           (migrations   )
    python manage.py migrate  #      ORM         
            
    #        :   models.py             ,               ,  ,      !!!

    ORM 문의 데이터베이스에 대한 간단한 조작
    여기에 가장 간단한 두 가지 조작, 즉 삽입과 조회를 소개한다
    데이터 삽입
    models.Userinfo.objects.create(username='admin', password='123')
    #            sql  :insert into userinfo(username,password) values('admin','123');
    # create         ,               
    #        ,                   ,    ,       

    데이터 조회
    # 1. get()                 ,                 (     )
    res = models.Userinfo.objects.get(username=username)  # select * from userinfo where username = 'jason'
    print(res)
    print(res.username, res.password)
    
    # 2. filter()   
      #          ,       ,               
      # filter         ,   and  
      # filter              ,            ,     ,     [-1]
    res = models.Userinfo.objects.filter(username=username, password=password)
    # user_obj = res[0]
    user_obj = res.first()  #  queryset     

    데이터 편집
    def edit_user(request):
        edit_id = request.GET.get('edit_id')#                  edit_id  ,        ,                  
        if request.method == 'POST':#   POST    ,   GET   
            #            
            username = request.POST.get("username")
            password = request.POST.get("password")
            '''
            POST   ,      GET        '''
            #             
            #    :  
            models.Userinfo.objects.filter(pk=edit_id).update(username=username, password=password)  #     , update    filter     queryset              
            
            #    :         ,            ,     ,          
            #           ,   ,            ,   update         
            # edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()
            # edit_obj.username = username
            # edit_obj.password = password
            # edit_obj.save()
    
            #          
            return redirect('/userlist')
        #  edit_id             ,        
        edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()
        return render(request, 'edit_user.html', locals())

    데이터 삭제
    def delete_user(request):
        #          id     
        delete_id = request.GET.get('delete_id')
        models.Userinfo.objects.filter(pk=delete_id).delete()  #     , filter               
        return redirect('/userlist')

    좋은 웹페이지 즐겨찾기