day 95 form 구성 요소

9299 단어
목차
  • form 구성 요소
  • forms 의 기본 사용
  • forms 의 데이터 형식
  • 예시
  • 총화


  • form 구성 요소
    사용자 가 입력 한 값 을 판단 하지 못 한 문제 가 있 었 습 니 다.
  • 입력 내용 을 검증 하 는 목적: 백 엔 드 코드 가 빈번 한 데이터베이스 연결 에 따 른 압력 감소
  • 전단 과 백 엔 드 를 모두 검사 해 야 합 니 다. 전단 js 는 비활성화 할 수 있 습 니 다
  • django forrms 는 주로 배경 검증 을 대상 으로 합 니 다.
    이전에 존 재 했 던 문제:
  • 사용자 의 값 을 검사 하지 않 았 습 니 다 (정규 표현 식 검사, 사용자 가 입력 한 문자 길 이 를 판단 합 니 다)
  • 이전 에는 하나씩 판단 했다
  • 사용자 입력 이 잘못 되면 사용자 가 지난번 에 제출 한 내용 을 보류 할 수 없습니다
  • forms 의 기본 사용
    #         
    # views.py
    from django.forms import Form
    from django.forms import fields
    class LoginForm(Form):
        #        
        #   form    name   
        username = fields.CharField(
            required=True,  #     
            max_length=16,  #      16
            min_length=6,   #      6
            error_messages={    #          
                'required': '    ',
                'max_length': '   ',
                'min_length': '   ',
            }
        )
        pwd = fields.CharField()
        age = fields.IntegerField(
            required=True,
            max_value=100,
            min_value=0,
            error_messages={
                "required" : '    ',
                "invalid"  : '    ',    #       invalid
            }
        )
        
    def login(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            # username = request.POST.get('username')
            # pwd = request.POST.get('pwd')
            obj = LoginForm(request.POST)
        print(obj)  #      
    
            if obj.is_valid():  #     ,       charField    ,             
                print(obj.cleaned_data) #            
            else:
                print(obj.errors)   #          ,         __str__,         
    
            return render(request, 'login.html', {'obj': obj})
    
    
    {{ obj.errors.username.0 }} :{{ obj.errors.age.0 }}

    forms 데이터 형식
    Field
        required=True,                     
        widget=None,                 HTML  
        label=None,                      Label       
        initial=None,                   
        help_text='',                    (       )
        error_messages=None,              {'required': '    ', 'invalid': '    '}
        validators=[],                      
        localize=False,                     
        disabled=False,                    
        label_suffix=None            Label    
     
     
    CharField(Field)
        max_length=None,                 
        min_length=None,                 
        strip=True                             
     
    IntegerField(Field)
        max_value=None,                 
        min_value=None,                 
     
    FloatField(IntegerField)
        ...
     
    DecimalField(IntegerField)
        max_value=None,                 
        min_value=None,                 
        max_digits=None,                
        decimal_places=None,              
     
    BaseTemporalField(Field)
        input_formats=None                  
     
    DateField(BaseTemporalField)      :2015-09-01
    TimeField(BaseTemporalField)      :11:12
    DateTimeField(BaseTemporalField)  :2015-09-01 11:12
     
    DurationField(Field)                :%d %H:%M:%S.%f
        ...
     
    RegexField(CharField)
        regex,                              
        max_length=None,                
        min_length=None,                
        error_message=None,           ,       error_messages={'invalid': '...'}
     
    EmailField(CharField)      
        ...
     
    FileField(Field)
        allow_empty_file=False            
     
    ImageField(FileField)      
        ...
         :  PIL  ,pip3 install Pillow
                 ,      :
            - form    enctype="multipart/form-data"
            - view    obj = MyForm(request.POST, request.FILES)
     
    URLField(Field)
        ...
     
     
    BooleanField(Field)  
        ...
     
    NullBooleanField(BooleanField)
        ...
     
    ChoiceField(Field)
        ...
        choices=(),                  , :choices = ((0,'  '),(1,'  '),)
        required=True,                 
        widget=None,                 ,  select  
        label=None,                Label  
        initial=None,                 
        help_text='',                  
     
     
    ModelChoiceField(ChoiceField)
        ...                        django.forms.models.ModelChoiceField
        queryset,                  #          
        empty_label="---------",   #        
        to_field_name=None,        # HTML value       
        limit_choices_to=None      # ModelForm  queryset    
         
    ModelMultipleChoiceField(ModelChoiceField)
        ...                        django.forms.models.ModelMultipleChoiceField
     
     
         
    TypedChoiceField(ChoiceField)
        coerce = lambda val: val              
        empty_value= ''                  
     
    MultipleChoiceField(ChoiceField)
        ...
     
    TypedMultipleChoiceField(MultipleChoiceField)
        coerce = lambda val: val                 
        empty_value= ''                  
     
    ComboField(Field)
        fields=()                        ,  :       20,       
                                   fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
     
    MultiValueField(Field)
        PS:    ,                   ,   MultiWidget  
     
    SplitDateTimeField(MultiValueField)
        input_date_formats=None,       :['%Y--%m--%d', '%m%d/%Y', '%m/%d/%y']
        input_time_formats=None        :['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
     
    FilePathField(ChoiceField)         ,           
        path,                           
        match=None,                    
        recursive=False,                   
        allow_files=True,              
        allow_folders=False,            
        required=True,
        widget=None,
        label=None,
        initial=None,
        help_text=''
     
    GenericIPAddressField
        protocol='both',           both,ipv4,ipv6   IP  
        unpack_ipv4=False            ipv4  ,   ::ffff:192.0.2.1  ,    192.0.2.1, PS:protocol   both    
     
    SlugField(CharField)             ,  ,   ,  (   )
        ...
     
    UUIDField(CharField)           uuid  
        ...

    예시
    # views.py
    from django.shortcuts import render
    
    # Create your views here.
    from django.forms import Form
    from django.forms import fields
    class LoginForm(Form):
        ###          
        username = fields.CharField(
            #$###       
            required=True,  
            max_length=16,  
            min_length=6,   
            error_messages = {  
                "required" : "    ",
                "max_length":"   ",
                "min_length":"   ",
            },
            #validators=[], #        ,     
            ##     html  
            # widget=fields.Select, #HTML  ,         input ,select
            label='   ', #     Label       
            # initial='hahaha', #    
            help_text='    ', #    (       )
            # localize=False, #        ,     UTC  ,True       
            disabled = False, #       
            label_suffix = ">>>" # Label    
        )
        pwd = fields.CharField()
    
        age = fields.IntegerField(
            required=True,
            max_value=100,
            min_value=0,
            error_messages={
                "required" : '    ',
                "invalid"  : '    ',
            }
        )
        email = fields.EmailField(
            error_messages={
                "invalid"  : '    ',
            }
        )
    
        phone = fields.RegexField(
            regex='^139\d{8}$'
        )
    
    # login POST  ,GET        
    def login(request):
        if request.method == 'GET':
            obj = LoginForm()
            return render(request, "login.html", {"obj":obj})
        else:
            # username = request.POST.get('username')
            # pwd = request.POST.get('pwd')
            obj = LoginForm(request.POST) ## {"username":'xx', 'pwd':'xx'}  
            if obj.is_valid():
                print(obj.cleaned_data) ##   
                else:
                    print(obj.errors) ###    __str__
    
                    return render(request, "login.html", {'obj':obj})
    
    
    {# username: {{ obj.errors.username.0 }}
    #} {# password: {{ obj.errors.pwd.0 }}
    #} {# age: {{ obj.errors.age.0 }}
    #} {# email: {{ obj.errors.email.0 }}
    #} {{ obj.username.label }} : {{ obj.username }} {{ obj.errors.username.0 }}


    총결산
    #   {{ obj.as_p }}  #       p    ,     {{ obj }}         
    #             ,      ,            ,                  ,   form     novalidate   ,     ,              
    
    #        ,label_suffix    ,     
    #         ,              
    #            ,        F12            id,   css js  
    
    #      ,                

    좋은 웹페이지 즐겨찾기