アドバンストジャンゴ(A)

選択パラメータ

選択引数
性別
ユーザー教育の
状態作業しているユーザー
の顧客のソースを
...

choices = (
  (1,'male'),
  (2,'female'),
  (3,'others')
)
gender = models.IntegerField(choices=choices)
"""
1.如果我存的是上面元组中数字会怎么样
2.如果我存的数字不在元组范围内又会怎样
    1.数字没有对应关系 是可以存的
"""    
from app01 import models
user_obj = models.Userinfo.objects.filter(pk=4).first()
print(user_obj.username)
print(user_obj.gender)
# 针对choices字段 如果你想要获取数字所对应的中文 你不能直接点字段
# 固定句式   数据对象.get_字段名_display()  当没有对应关系的时候 该句式获取到的还是数字
print(user_obj.get_gender_display())

例1

record_choices = (('checked', "已签到"),
                  ('vacate', "请假"),
                  ('late', "迟到"),
                  ('noshow', "缺勤"),
                  ('leave_early', "早退"),
                 )
record = models.CharField("上课纪录", choices=record_choices, default="checked", 

例1

score_choices = ((100, 'A+'),
                 (90, 'A'),
                 (85, 'B+'),
                 (80, 'B'),
                 (70, 'B-'),
                 (60, 'C+'),
                 (50, 'C'),
                 (40, 'C-'),
                 (0, ' D'),
                 (-1, 'N/A'),
                 (-100, 'COPY'),
                 (-1000, 'FAIL'),
                )
score = models.IntegerField("本节成绩", choices=score_choices, default=-1)

MTVとMVCモデル

MTVとして知られているDjangoフレームワークは、実際には、彼はMVCフレームワークでした
:MTV
M:モデル、モデル、データモデルのデータにアクセスするための責任がある;
T:ページを担当するプレゼンテーションロジックテンプレート、テンプレート、;
V:ビュー、ビュー機能、業務の責任論理処理;
MVC:
M:モデルアクセス、モデル、データ・モデルは、データのために責任がある;
V:論理ビュー、ビュー、責任のページを示し;
C:(ルートが一致)contronnerを、コントローラが処理サービスロジックを担当して;

9

注意:コア狙いは切り離すことで、開発効率を向上させるために

アヤックス

中国語に翻訳AJAX(非同期JavaScriptとXML)は、「非同期JavascriptとXML」です。JavaScript言語の使用は、XML用のサーバーの非同期データ伝送と対話すること(もちろん、データ伝送は、XMLだけではありません)。(個人的な経験の始まりASYN、基本的に非同期相関)

AJAXは、新しいプログラミング言語ではなく、既存の標準を使用する新しい方法。

最大の利点は、ページ全体をリロードせずにAJAXでは、ページのコンテンツのサーバと更新パーツとデータを交換することができます。(この機能は、ユーザーの要求と応答プロセスへの気持ちが無意識のうちに終了しています)

AJAXは、任意のブラウザプラグインが必要ですが、ブラウザでのJavaScriptの実行を許可するユーザーを必要としません。

  • 同期相互作用:クライアントが要求を送信し、それが第2の要求を送信する前にサーバの応答の終了を待たなければなりません。
  • 非同期相互作用は、クライアントが応答の終了を待たずにサーバに要求を送信し、それが第2の要求を発行することができます。

アヤックス文法構造

非同期提出

同期非同期:説明提出タスク

同期:その場のタスクを提出した後辞め任意のものの結果待っているタスクの復帰時
に非同期は:直接タスクはコールバックメカニズムによって返されたタスクの提出後に次のコード行を待つ必要はありません

非ブロッキングとブロッキング:プログラムの実行を

図の三つの実行状態。

パーシャルリフレッシュ

ページの更新ではなく、ページ全体のどこかにパーシャルリフレッシュ

アヤックスは、ネイティブのJSの開発に基づいて、JS技術の一つですが、ネイティブコードは、JSを書くには余りにも複雑です

唯一のAJAXのためのjQueryを使用する方法を学びます

JSONとは何ですか?

  • JSONはJavaScriptオブジェクト表記法(JavaScript Object Notation)は指し
  • JSONは軽量のデータ交換形式のテキストです
  • JSONの言語に依存しません*
  • よりよく理解JSONの自己記述

  • JSONは、データオブジェクトを記述するために、JavaScriptの構文を使用していますが、JSONはまだ言語やプラットフォームに依存しないです。JSONパーサーとJSONライブラリは、多くの異なるプログラミング言語をサポートしています。

資格のJSONオブジェクト(JSONプライマーは唯一の二重文字列形式を認識):

["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"} ] 

JSONオブジェクトを失敗しました:

{ name: "张三", 'age': 32 }  // 属性名必须使用双引号
[32, 64, 128, 0xFFF] // 不能使用十六进制值
{ "name": "张三", "age": undefined }  // 不能使用undefined
{ "name": "张三",
  "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
  "getName":  function() {return this.name;}  // 不能使用函数和日期对象
}

例:

1は、2つのフレーム要求入力デジタルクリックの後端に向かって3つの入力ボタン前のページフレームとフロントページ示す
リフレッシュせずにページを追加する場合には、完全な番号を

<input type="text" id="t1"> + <input type="text" id="t2"> = <input type="text" id="t3">
<p>
<button id="b1">计算</button>
</p>

$('#b1').on('click',function () {
  // 朝后端提交post数据
  $.ajax({
    // 1.到底朝后端哪个地址发数据
    url:'',  // 专门用来控制朝后端提交数据的地址  不写默认就是朝当前地址提交
    // 2.到底发送什么请求
    type:'post',  // 专门制定ajax发送的请求方式
    // 3.发送的数据到底是什么
    data:{'t1':$('#t1').val(),'t2':$('#t2').val()},
    // 4.异步提交的任务 需要通过回调函数来处理
    success:function (data) {  // data形参指代的就是异步提交的返回结果
                             // 通过DOM操作将内容 渲染到标签内容上
                             $('#t3').val(data)
                            }
  })
})
from django.shortcuts import render,HttpResponse
def index(request):
  print(request.is_ajax())  # 判断当前请求是否是ajax请求
  if request.is_ajax():
    if request.method == 'POST':
      # print(request.POST)
      t1 = request.POST.get('t1')
      t2 = request.POST.get('t2')
      res = int(t1) + int(t2)
      return HttpResponse(res)

前部および後部は、送信データの符号化フォーマットを終了します

送信データの符号化形式のフロントエンドをCONTENTTYPE

form表单 默认的提交数据的编码格式是urlencoded
    urlencoded
        username=admin&password=123这种就是符合urlencoded数据格式

        django后端针对username=admin&password=123的urlencoded数据格式会自动解析
        将结果打包给request.POST 用户只需要从request.POST即可获取对应信息

    formdata
        django后端针对formdata格式类型数据 也会自动解析但是不会方法request.POST中而是给你放到了request.FILES中

ajax  ajax默认的提交数据的编码格式也是urlencoded
    username=jason&password=123

要約:メソッドを持っているバックエンドの異なるメカニズムと異なるデータ符号化フォーマットのデータへの異なるアクセスをジャンゴ

データ交換を行う際にフロントとリアエンドは、あなたが最後にデータを送信することを示すために確認する必要がありますどのような形式であります

あなたは後に、前方インタラクティブ家うそをつくことができない
あなたはどのような形式他人に伝える必要があり、あなたのデータが正確であるどのような形式

アヤックスは、JSON形式のデータを渡します

データのためのDjangoのバックエンドJSON形式は自動的にあなたが無傷で解決するのに役立つことはありません直接request.bodyであなたを置く
手動でデータ収集を扱うことができます

json_bytes = request.body
json_str = STR(json_bytes、エンコード= 'UTF-8')
json_dict = json.loads(json_str)

ポイントがあります
。1.パラメータはcontentTypeの指定
「ファイルのアプリケーション/ JSON」:contentTypeの
データ・フォーマットを送信することを確認するために2. JSONで
データ:JSON.stringify({「ユーザ名」:「ジェイソン」、「パスワード」: '123'})

<form action="" method="post" enctype=""> # application/x-www-form-urlencoded 发普通键值, multipart/form-data 发文件,向普通兼容,反之不行。 
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="file" name="myfile">
  <input type="submit">
</form>

Ajaxの転送ファイル

    需要利用内置对象 Formdata
    该对象既可以传普通的键值 也可以传文件
    
    # 获取input获取用户上传文件的文件的内容
    // 1.先通过jquery查找到该标签
    // 2.将jquery对象转换成原生的js对象
    // 3.利用原生js对象的方法 直接获取文件内容
    $('#t3')[0].files[0]

。$( '#のB1')をクリックします(関数(){
// 1.氏がターゲットにFORMDATA
varがいるFormDataを新しい新=()myFormData;
//オブジェクトに向けて2.共通のキーの追加
myFormDataを。 APPEND( 'ユーザ名'、$( "#のT1")ヴァル());
myFormData.append( 'パスワード'、$( "#のT2")ヴァル());
//オブジェクトに向けて3. [追加データファイル
//タグ1のjQueryによる初見に
//ネイティブ2. JS対象jQueryオブジェクトに変換
ネイティブメソッドのjsオブジェクトファイルの内容に直接アクセスする// 3.使用を
myFormData.append(「myfileを'$(' #のT3 ')[0] .files [0]);
$アヤックス({
URL:' '
タイプ' POST」、データ:myFormData、直接スローオブジェクト//

        // ajax传文件 一定要指定两个关键性的参数
        contentType:false,  // 不用任何编码 因为formdata对象自带编码 django能够识别该对象
        processData:false,  // 告诉浏览器不要处理我的数据 直接发就行

        success:function (data) {
            alert(data)
        }
    })
})

「」「

ファイルを転送するために注意が必要な事項AJAX
単純なオブジェクトを使用して1 FORMDATAは迅速にデータを転送することができます(+ノーマルキーファイル)
2.いくつかのパラメータの
データ:FORMDATAオブジェクト

contentTypeの:偽
PROCESSDATA:偽

「『』

シリアル化アセンブリ

自動データのシリアライズ

1.将用户表的数据 查询出来 返回给前端
给前端的是一个大字典 字典里面的数据的一个个的字段
from django.core import serializers
def ser(request):
user_queryset = models.Userinfo.objects.all()
# [{},{},{},{}]
# user_list = []
# for user_obj in user_queryset:
#     user_list.append({
#         'username':user_obj.username,
#         'password':user_obj.password,
#         'gender':user_obj.get_gender_display(),
#     })
res = serializers.serialize('json',user_queryset)
print(res)
return render(request,'ser.html',locals())

AJAX合わせジョイントsweetalert

 ajax + sweetalert
        $("#b55").click(function () {
        swal({
                    title: "你确定要删除吗?",
                    text: "删除可就找不回来了哦!",
                    type: "warning",
                    showCancelButton: true,  // 是否显示取消按钮
                    confirmButtonClass: "btn-danger",  // 确认按钮的样式类
                    confirmButtonText: "删除",  // 确认按钮文本
                    cancelButtonText: "取消",  // 取消按钮文本
                    closeOnConfirm: false,  // 点击确认按钮不关闭弹框
                    showLoaderOnConfirm: true  // 显示正在删除的动画效果
                },
                function () {
                    var deleteId = 2;
                    $.ajax({
                        url: "/delete_book/",
                        type: "post",
                        data: {"id": deleteId},
                        success: function (data) {
                            if (data.code === 0) {
                                swal("删除成功!", "你可以准备跑路了!", "success");
                            } else {
                                swal("删除失败", "你可以再尝试一下!", "error")
                            }
                        }
                    })
                });
    })

おすすめ

転載: www.cnblogs.com/zfb123-/p/11756447.html