ディレクトリ
ジャンゴ-5
選択パラメータ
あなたは、重複データが発生した場合、テーブルを作成する過程で、我々は、性別、唯一の男性と女性として、このフィールドに対応するレコードの代わりに番号を使用することができますので、私たちはより良い、事前の性別のカテゴリの1人の男性を定義することができ、2女性の表現、そして我々は直接の対応関係を使用してデータを挿入することができます。
choices = (
(1,'male'),
(2,'female'),
(3,'others')
)
gender = models.IntegerField(choices=choices)
あなたは性別フィールドに直接それを取る場合は、表示されるか、またはデジタル、どのようにそれのデジタル表現との対応を取得するには?
user_obj = models.Userinfo.objects.filter(pk=4).first()
print(user_obj.get_gender_display())
# 固定句式 数据对象.get_字段名_display()
注意:時々 、まだ姿を取り出していない場合は、ときにカスタム対応関係との対応から取り出したとき。
MTVとMVCモデル
MTVは、それがMVCフレームワークであり、本質的には、Djangoフレームワークとして知られています。非同期提出
- MTV:
- M:モデル
- T:テンプレート
- V:ビュー
- MVC:
- M:モデル
- V:ビュー
- C:contronner(ルーティング割当て)
Ajaxの非同期提出します
同期非同期:説明提出タスク
- 同期:その場の任意のものの結果を待っているタスクの復帰時は、ミッションを提出した後に終了しました
- 非同期:タスクの提出後に直接コールバックメカニズムによって返されたタスクを実行するために次のコード行を待つ必要はありません
パーシャルリフレッシュ:ページではなく、全体的にさわやかな、しかしどこか部分では、ページを更新します。
AJAXは、新しいプログラミング言語ではなく、既存の規格を使用する新しい方法は、(JSネイティブJSの開発に基づく技術です)。
最大の利点は、ページ全体をリロードせずにAJAXでは、ページのコンテンツのサーバと更新パーツとデータを交換することができます。(この機能は、ユーザーの要求と応答プロセスへの気持ちが無意識のうちに終了しています)
AJAXは、任意のブラウザプラグインが必要ですが、ブラウザでのJavaScriptの実行を許可するユーザーを必要としません。
- 同期相互作用:クライアントが要求を送信し、それが第2の要求を送信する前にサーバの応答の終了を待たなければなりません。
- 非同期相互作用は、クライアントが応答の終了を待たずにサーバに要求を送信し、それが第2の要求を発行することができます。
Ajaxの構文意志
# views.py
def add(request):
if request.is_ajax():
if request.method == 'POST':
t1 = request.POST.get('t1')
t2 = request.POST.get('t2')
res = int(t1) + int(t2)
return HttpResponse(res)
return render(request, 'add.html')
# add.html
<h1>A+B=???</h1>
<p>A:<input type="text" class="form-control a"></p>
<p>B:<input type="text" class="form-control b"></p>
<p>C:<input type="text" class="form-control c"></p>
<br>
<button id="btn">计算</button>
<script>
$('#btn').on('click',function () {
$.ajax({
url:'',
type:'post',
{#contentType:'application/json',#}
data:{'t1':$('.a').val(),'t2':$('.b').val()},
success:function (data) {
$('.c').val(data)
$('.a').val('')
$('.b').val('')
alert('计算成功!')
}
})
})
</script>
# 分析:
url:'', : 专门用来控制朝后端提交数据的地址,不写默认就是朝当前地址提交。
type:'', : 专门指定Ajax发送得到请求方式。
contenType:'', : 告诉后端你当前的数据格式到底是什么类型。
data:'', : 向后端发送的数据。
success:function(data){} : data形参指代的是异步提交的返回结果,success指定回调函数,可对后端返回数据做处理。
アヤックスJSON形式のデータ転送
データのためのDjangoのバックエンドJSON形式は、と自動的に直接そのままに、あなたが解決する助けにはなりませんrequest.body
手動プロセス、データを取り出すことができ、。
$("#btn").on('click',function () {
$.ajax({
url:'',
type:'post',
// 指定提交的数据的类型为json
contentType:'application/json',
// 将自定义对象序列化为json数据。
data:JSON.stringify({'username':'nick','password':'123'}),
success:function (data) {
alert(data)
}
})
})
def index(request):
# 判断提交方式是否为Ajax
if request.is_ajax():
if request.method == 'POST':
json_data = str(request.body,encoding='utf8')
json_dic = json.loads(json_data)
print(json_dic,type(json_dic))
return HttpResponse(json_dic)
return render(request,'index.html')
Ajaxの転送ファイル
- 組み込みオブジェクトを使用する必要がFORMDATA
- オブジェクトは、両方の通常のキーはまた、ファイルを転送することができます渡すことができます
<body>
<input type="text" name="username" id="a">
<input type="text" name="password" id="b">
<input type="file" name="myfile" id="c">
<button id="btn">提交</button>
<script>
$('#btn').on('click',function () {
// 生成form_data对象
var form_data = new FormData();
在form_data对象中添加普通的键值
form_data.append('username',$('#a').val());
form_data.append('password',$('#b').val());
// 朝form_data对象中添加文件数据
// 1.先通过jquery查找到该标签
// 2.利用索引0转换成原生的js对象
// 3.利用原生s对象的file()方法,直接获取文件的内容
form_data.append('myfile',$('#c')[0].files[0]);
$.ajax({
url:'',
type:'post',
data:form_data, // 直接将对象当作数据
contentType:false, // 不使用任何编码,因为form_data对象自带编码
processData:false, // 告诉浏览器不要处理,直接发就行
success:function (data) {
alert(data)
}
})
})
</script>
</body>
def upload(request):
if request.is_ajax():
if request.method == 'POST':
print(request.POST)
print(request.FILES)
return HttpResponse('已收到文件!')
return render(request,'upload.html')
"""
ajax传文件需要注意的事项
1.利用formdata对象 能够简单的快速传输数据 (普通键值 + 文件)
2.有几个参数
data:formdata对象
contentType:false
processData:false
"""
送信データの符号化形式のフロントエンドをCONTENTTYPE
フォームフォームは、データのデフォルトのエンコード形式がURLエンコードされた提出します
URLエンコード
- URLエンコードデータ形式と一致しているユーザ名=管理者&パスワード= 123
- ユーザ名=管理者&パスワードのためのDjangoの後端= URLエンコードデータフォーマット123は、自動的に解析します
取得するユーザーにのみrequest.POST request.POST対応情報をパッケージから結果を
へformdat
- Djangoのバックエンドは自動的にFORMDATAのためのデータフォーマットタイプを解析します
- しかし、request.POSTを入れていないのではなく、request.FILESであなたを置くために
アヤックス
- Ajaxの提出データのデフォルトのエンコード形式もURLエンコードされました
要約:Djangoのバックエンドデータは、異なる符号化フォーマットのため、何も処理機構とデータ収集の異なる方法が存在しないであろう。
注意:
データ交換を行う際にフロントとリアエンドは、あなたが最後にデータを送信することを示すために確認する必要がありますどのような形式であります
あなたが人々に伝える際にどのような形式は、データがどのような形式に正確でなければなりません
シリアル化アセンブリ
クエリデータは、辞書データの大規模な辞書の分野の前端に、フロントエンドのうち、ユーザテーブルに返されます
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
$("#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")
}
}
})
});
})
"""
当你是用ajax做前后端 交互的时候
你可以考虑返回给前端一个大字典
"""
import time
from django.http import JsonResponse
def sweetajax(request):
if request.method == 'POST':
back_dic = {"code":1000,'msg':''}
delete_id = request.POST.get('delete_id')
models.Userinfo.objects.filter(pk=delete_id).delete()
back_dic['msg'] = '后端传来的:真的被我删了'
time.sleep(3)
return JsonResponse(back_dic)
user_queryset = models.Userinfo.objects.all()
return render(request,'sa.html',locals())