多くの-方法とフォームアセンブリセッションクッキーを作成するには、3つの方法

1.自動(推奨*)
            利点:あなたが手動で第三のテーブルを作成する必要はありません
            、あなたは手動で作成したよりも、3番目のテーブル以来3番目のテーブルが固定されることを意味し、フィールドの拡張を行うことはできません。不足しています

クラスブック(models.Model):
  タイトル = models.CharField(max_lengthを= 32 
  価格 = models.DecimalField(max_digits = 8、decimal_places = 2 
  著者(=へ= models.ManyToManyField ' 著者' 

クラスの著者(models.Model ):
  名前 = models.CharField(MAX_LENGTH = 32)

 2.ピュアマニュアルは(理解して)
            独自の第三のテーブル作成
            の利点を:第三拡張フィールドは任意のものとすることができる
            不足:ORMクエリは便利ではありません

クラスブック(models.Model):
  タイトル = models.CharField(max_lengthを= 32 
  価格 = models.DecimalField(max_digits = 8、decimal_places = 2 

クラスの著者(models.Model):
  名前 = models.CharField(max_lengthを= 32 
                            
クラスBook2Author(models.Model):
  ブック = models.ForeignKey(=に' ブック' 
  の著者(=へ= models.ForeignKey ' 著者' 
  CREATE_TIME = models.DateField(auto_now_add =真)

3.半自動(******推奨)
            利点:2つの純粋な自動と手動の利点を組み合わせました

クラスブック(models.Model):
    タイトル = models.CharField(max_lengthを= 32 
    価格 = models.DecimalField(max_digits = 8、decimal_places = 2 
    著者 = models.ManyToManyField(=に' 著者' =通じ、' Book2Author '、 through_fields =(' ブック'' 著者' ))

クラスの著者(models.Model):
    名前 = models.CharField(max_lengthを= 32 

クラスBook2Author(models.Model):
    ブック = models.ForeignKey(=に" ブック' 
    著者 = models.ForeignKey(=に' 著者" 
    CREATE_TIME = models.DateField(auto_now_add =真)

基本的なコンポーネントの使用状況を形成

ジャンゴインポートフォーム

クラスLoginForm(forms.Form):(。。= MAX_LENGTH 8、MIN_LENGTH = 3)= forms.CharField   #1 名最短最長8つの3 
    パスワード= forms.CharField(MAX_LENGTH = 8、   MIN_LENGTH = 5) パスワードの最大8最小5通の 
    メールforms.EmailField =()  メールは、メールボックス形式でなければなりません

基本的な使用

コンソールpyton検証で
から
app01 インポートビュー 。1は、クラスオブジェクトのインスタンスにデータを検証するカスタム辞書のようにして生成される。 Form_obj = views.LoginForm({ ユーザ名ジェイソンパスワード123 電子メール123 }) 2 。すべての法的データかどうかを確認する方法 form_obj.is_valid() のみすべてのデータが要件に沿ったものであるがTrueになります Falseの 3 エラー原因を表示する方法。 form_obj.errors { " パスワード":[ 「Ensure®少なくともこの値を有する5つの文字(それが有する3)。]、 メールに:[ メールアドレスに有効なを入力してください。] } 4。データ検証を表示する方法。 Form_obj.cleaned_data { ' ユーザ名'' ジェイソン" }

注:
     すべてのフィールド1.カスタムクラスは、デフォルト値の合格するために必要な
      フィールド名を定義しない場合があり、追加の着信クラスがチェックを行っていない構成要素を形成2.マルチパスが何もなかったことを意味します

レンダリングページ

<P>ページをレンダリングするための最初の方法(ローカルテストは、一般的に適用できないため、カプセル化の高い度合いは、一般的に使用される)</ P> 
    {form_obj.as_p} {}   
    {} {form_obj.as_ul} 
    {} {} form_obj.as_table
                
 <P>第2の実施形態のページ(より高いスケーラビリティトラブル書き込み)をレンダリングすることである</ P> 
    <P> form_obj.username.label {} {} {} {} form_obj.username </ P> 
    <P> { form_obj.password.label {} {} {}} form_obj.password </ P> 
    <P> {{{{form_obj.email.label form_obj.email}}}} </ P> 
                
<P>第3ページにレンダリングされますファッション(推奨)</ P> 
    {ため FOO  form_obj%}
         <P> foo.label {} {} {} {} FOO </ P> 
    {%} ENDFOR%


    1.formsコンポーネントを使用すると、手動で追加する必要があるときにあなたを助けるためにページをレンダリングする際にユーザー入力を取得するためにラベルをレンダリングします送信ボタン         
     大文字の最初の文字と、デフォルトが指定されていないクラスのフィールドケース2.inputコメントボックスのラベルを

ブラウザ遠位キャンセルチェック機能の
                属性がNOVALIDATEを指定するフォームタグ
                <フォームアクション=「」メソッド= 「ポスト」NOVALIDATE> </フォーム>

エラーメッセージを表示

フロント

<フォームアクション= ""メソッド= " ポスト" > 
    {ため FOO  form_obj%}
         <P> {{foo.label}}:{{FOO}}
         <スパン> {{foo.errors.0}} </スパン> 
        </ P> 
    {%ENDFOR%}

バックエンド

= forms.CharFieldパスワード(= MAX_LENGTH 8、MIN_LENGTH = 5、ラベル=。。' パスワード'、error_messages、= {
                                    ' MAX_LENGTH '' パスワード最大8 ' ' MIN_LENGTH '' パスワードの最小5 ' ' 必要'' パスワードを空にすることはできません' 
                               }、必要な偽=、= [RegexValidator(R&LTバリ' ^ [0-9] + $は' '番号を入力してください")、RegexValidator(R&LT ' ^ 159 [0-9] + $ '' 数が159を起動する必要があります')])  パスワード最短、最長8 5

フック関数(HOOK)

使用方法:への書き込みのカスタムクラスメソッドの形式では
 ローカルフック(フィールドの追加の検証を行う)ヒントを一度に含まれるユーザ名666を検証することはできません
    DEF :(自己を)clean_username  = self.cleaned_data。 (GET ユーザ名IF  666  、ユーザ名:
            self.add_error(ユーザ名光はあなたが所有しなければならない上666を呼び出すのに十分ではありませんの戻りユーザ名
         グローバルフックを(複数のフィールドのための余分なチェックを行うため)ユーザーパスワードかどうかをチェック倍一貫した
    DEF クリーン(セルフ):
        パスワード = self.cleaned_data.get(パスワード
        confirm_password = self.cleaned_data.get(' confirm_password ' の場合 ではないパスワード== confirm_password:
            self.add_error(' confirm_password '' 两次密码不一致' の戻り self.cleaned_data

クッキーとセッション
        によるHTTPプロトコルにはステートレスであるユーザの状態を記録することはできません       
      

   クッキーのキーは、クライアントのブラウザに保存されている
            作品:あなたが成功し、ブラウザ上の情報の一部を保存してログインし、次の時間を訪問するとき、それはサーバ情報を介してサーバにアクセスするには、この情報を取得しますあなたの身元識別するために           
            クッキーを、クライアントのブラウザで書かれてますが、サーバーが設定されているものの、ブラウザが書き込みクッキーの禁止命令に従わないように選択することができる
                 
        ため、サーバー上に保存されたセッションキーを
            ただし、サーバー上に保存されたセッション右側のキーが、それはクッキーの仕事に依存しているが、サーバーがブラウザにランダムな文字列を返す、キーと値のペアの形式でブラウザ店は
            SESSIONID:ランダムな文字列を
            
            ブラウザにサーバーにアクセスしたときになりますランダムな文字列の運搬は、後端部の後端が一致しないランダムな文字列のレコードを取得し
                、ランダムな文字列を1:1つのデータ
                のランダムな文字列2:データ2

设置セッションますrequest.session [ '名前'] = 'ジェイソン'

获取セッションrequest.session.get( '名前')

Djangoのセッションのデフォルトのタイムアウトは14日です

django_sessionテーブルブラウザのレコード

request.session.delete()#のセッションID情報は、ブラウザを削除されます

request.session.flush()#は、すべてのブラウザとサーバを削除します

 

セッションセッションとクッキーのタイムアウト設定
        request.session.set_expiry(値)
            値が整数である場合は*を、セッションは秒のいくつかの数の後に期限切れになります。
            *値はdatatimeかはtimedeltaである場合、セッションはこの時間の後に期限切れになります。
            値が0の場合は*、ユーザーがブラウザセッションが失敗します閉じます。
            *値がNoneの場合、セッションがグローバルセッション有効期限ポリシーに依存します。

おすすめ

転載: www.cnblogs.com/zrh-960906/p/11580907.html