Python全棧 Web(Django框架、forms對象、cookie、session)


forms模塊的高級處理
    將models和forms結合到一起使用
    1.在forms.py中創建class  繼承自forms.ModelForm
    2.創建一個內部類Meta來關聯Model
        model  指定要關聯的實體類是誰
        fields 指定從model中取出那些字段生成控件
            取值  "__all__"表示全部屬性都要生控件
                 列表  聲明允許生成控件的屬性名
        labels 指定每個屬性所關聯的label  取值爲字典
            label = {
                '屬性名':'label文本',
                '屬性名':'label文本',
            }

class RegisterForm(forms.ModelForm):
  #通過內部類Meta表示關聯的信息
  class Meta:
    #1.指定關聯的Model
    model = User
    #2.指定要生成控件的字段們
    fields = "__all__"
    #3.指定每個控件對應的label
    labels = {
      'uphone':'電話號碼',
      'upwd':'登錄密碼',
      'uname':'用戶名稱',
      'uemail':'電子郵件',
    }

  if request.method == 'GET':
    form = RegisterForm()
    return render(request,'05-register.html',locals())

    小部件:
        什麼是小部件?
            widget表示生成到頁面上的控件類型以及其他的HTML屬性
        常用小部件類型
            TextInput:      type="text"
            PasswordInput:  type="password"
            NumberInput:    type="number"
            EmailInput:     type="email"
            URLInput:       type="url"
            HiddenInput:    type="hidden"
            CheckboxInput:  type="checkbox"
            Textarea:       <textarea></textarea>
            Select:         <select></select>
        小部件的使用
            繼承自forms.Form
                基本
                    只需要指定控件的類型
                    class RemarkForm(forms.Form):
                        屬性 = forms.CharField(
                            label:'文本',
                            widget=forms.小部件類型
                        )
                高級
                    指定控件類型的基礎上 還允許設置HTML的一些相關屬性
                    屬性 = forms.CharField(
                        label="文本"
                        widget=forms.小部件類型(
                            attrs = {
                                "html屬性名":"html屬性值",
                                "html屬性名":"HTML屬性值"
                            }
                        )
                    )

            繼承自forms.ModelForm
                class xxxForm(forms.ModelForm):
                    class Meta:
                        model = User
                        fields = "__all__"
                        labels = {
                            "屬性":"label"
                        }
                        widgets = {
                            "屬性1": forms.小部件類型(attrs={
                            }),

                        }

class LoginForm(forms.ModelForm):
  class Meta:
    model = User
    fields = ['uphone','upwd']
    labels = {
      'uphone':'註冊電話',
      'upwd':'登錄密碼',
    }
    #指定小部件
    widgets = {
      'upwd':forms.PasswordInput(attrs={
        'placeholder':'請輸入您的密碼'
      })
    }

class WidgetLoginForm(forms.Form):
  uphone = forms.CharField(label='電話號碼')
  #爲pwd指定小部件,顯示爲 密碼框
  # upwd = forms.CharField(label='登錄密碼',widget=forms.PasswordInput)
  upwd = forms.CharField(
    label='登錄密碼',
    widget=forms.PasswordInput(
      attrs = {
        'placeholder':'請輸入密碼',
        'class':'form-control',
      }
    )
  )

cookies在Django中的實現
    django中使用cookies
        設置cookies:
            響應對象.set_cookie(key, value, expires)
              key:cookie的名字
              value:cookie的值
              expires:保存時間 以s爲單位
            響應對象:
                HttpResponse()
                  resp = HttpResponse("hello")
                  resp.set_cookie(response, "xxx.html", locals())
                  return resp
                render()
        獲取cookies的值:
            通過request.COOKIES 獲取當前站點下對的所有的cookie的信息

def login_views(request):
  if request.method == 'GET':
    #判斷uname是否存在於cookies中,如果有的話,直接提示登錄成功,否則,去往09-login模板
    if 'uname' in request.COOKIES:
      return HttpResponse('您已成功登錄過')
    return render(request,'09-login.html')
  else:
    # 獲取用戶名稱和密碼
    uname=request.POST['uname']
    upwd = request.POST['upwd']
    # 判斷用戶名稱和密碼的
    if uname=='wangwc' and upwd=='123456':
      # 如果用戶名和密碼正確的話,判斷有沒有勾住記住密碼
      resp = HttpResponse("登錄成功")
      if 'isSaved' in request.POST:
        # 如果有勾住記住密碼,則將用戶名稱保存進cookies
        resp.set_cookie('uname',uname,60*60*24*90)
      return resp
    else:
      return HttpResponse('登錄失敗')

session在django中的實現:
    設置session的值:
        request.session["key"] = value
    獲取session的值:
        value = request.session["key"]
    刪除session的值
        del request.session["key"]
    在settings.py中設置session的相關設置
        SESSION_COOKIE_AGE
            設置 sessionID在cookies中的保存時間
            SESSION_COOKIE_AGE = 60 * 60 * 24  # 最多保存24小時
        SESSION_EXPIRE_AT_BROWSER_CLOSE
            設置關閉瀏覽器是則清空服務器上對應的session空間
            bool值

# 設置session
def setSession_views(request):
  request.session['uname']='wangwc'
  return HttpResponse('Set Session Succefull')

# 獲取session
def getSession_views(request):
  uname = request.session['uname']
  return HttpResponse('uname:'+uname)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章