Djangoのビュー層views.py

view.py

ラベルテンプレートの後端の例

Copyfrom django.template import Template,Context # 导入模块
from django.shortcuts import render,Httpsponse,redirect

バックエンドでラベルスタイルとコンテンツをアップロードするには

Copydef text(request):
    stencil = Template("<h1>{{ user }}</h1>")
    content = Context({'user': '我是cheer'})
    msg = stencil.center(content)
    return HttpResponse(msg)
# 上述操作,标签就可以生效

データ転送フォーマットのJSON

Copyfrom django.http import JsonResponse # 导入模块

通常の伝記の辞書について

方法1:JSONモジュールを使用します

Copy# def text(request):
#     dic = {'username': '超哥', 'password': '123', 'is_boy': True}
#     json_data = json.dumps(dic,ensure_ascii=False)
#     return HttpResponse(json_data)

第二の方法:Djangoのカプセル化方式のJSONを使用して

Copy# def text(request):
#     dic = {'username': '超哥', 'password': '123', 'is_boy': True}
#     return JsonResponse(dic, json_dumps_params={'ensure_ascii': False})

転送リストについて

方法1:JSONモジュールを使用します

Copy# def text(request):
#     lis = [1, 2, 3, 4, 5]
#     json_data = json.dumps(lis, ensure_ascii=False)
#     return HttpResponse(json_data)

第二の方法:Djangoのカプセル化方式のJSONを使用して

Copydef text(request):
    lis = [1, 2, 3, 4, 5]

    # return JsonResponse(lis, json_dumps_params={'ensure_ascii': False})  # 报错
    return JsonResponse(lis, safe=False, json_dumps_params={'ensure_ascii': False}) # 设置safe=False 不报错

# JsonResponse默认只支持字典类型,如果想要序列化其他数据类型,这个必须是json支持的数据类型,就必须设置safe=False

デフォルトのJSONはより多くのフォーマットをサポートして書き換え

我々はことを知っているオープンソースコード、CLS内のソースコード=なし

1571831629580

その後、我々が見ることができる断る条件は、CLS = Noneをトリガしません

1571831737028

我々はJSONEncoder、CTRL +マウスの右ボタンを見ることができます今回は、JSONデータ・フォーマットをサポートしているテーブルを、見ることができます

1571831848599

その後下げて、我々は、エラーの方法を制御することが可能であるデフォルトメソッド内JSONEncoderを、見ることができます。

1571832063270

限り、我々はJSONEncoderを継承するように、この時間、このクラス次のデフォルトメソッドのオーバーライド、エラーを防止するための時間をサポートしていませんJSONでデータを入力することができます。変装、それがデータでサポートされていないが、データをサポートしてしまいますA。

Copyimport json
import datetime

ctime = datetime.datetime.today()

class Myjsonclass(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            return o.strftime('%Y-%m-%d')
        else:
            super().default(self, o)


print(json.dumps({'ctime': ctime}, cls=MyJson))


# 其实就是还是不支持这种数据格式,只是在内部把他改成了字符串等json支持的格式.

内側の自分のJSONを提供するために、この方法があります(下の英語)

1571832525346

ファイルをアップロードするためのフォームを形成します

フロント:

Copy<form action="" method="post" enctype="multipart/form-data">
    <form>
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="file" name="up_file">
        <button type="submit" class="btn btn-default">Submit</button>
    </form>
</form>

# 前端的form表单中,只有设置 enctype="multipart/form-data",才可以上传文件

リア:

Copydef text(request):
    if request.method == 'POST':
        file_obj = request.FILES.get('up_file')
        # 这里拿的对象,可以对象.name,拿到上传的文件的名字
        with open(file_obj.name,'wb') as fw:
            for line in file_obj.chunks():
                fw.write(line)
                
# chunks() : 这个方法是类似于 read(),但是read()是一次性读,会很占内存,这个方法是如果文件大于2.5M,就会分段传输,不会去大量使用内存,并且这个上限是可以更改的.
            

CBV

書き込む前にFBVがあり、ビュー機能に基づいて、書き込みを行う機能、を介して行われ、CBVは、クラスベースの図です。

あなたが記事を書き、クラスの2つのメソッドを取得する場合は、フロントエンドが要求を取得するには、それは、POSTメソッドを設定しますリクエストを投稿するgetメソッドをトリガーします。

Copy1. views.py
# 导包
from django.views import View


class Test(View):
    def get(self, request):
        return render(request, 'test1.html')

    def post(self, request):
        return HttpResponse('我是post请求')
    
    
2. urls.py
url(r'^test/', views.Test.as_view()),

CBVのソースコード解析

まず、私たちはURLを入力して、関係を対応するローカルルーティングとビュー機能を入力して、あなたは見つけるでしょうurl(r'^test/', views.Test.as_view())、我々はそれを知っているので、as_view()ブラケットの関数でプラス、それは最初に実行されますas_view()

1571835453332

CTRL +、ソースコードに左クリックを参照as_view()以下のview関数は、そのビューを返し、閉鎖がされて機能さas_view()返されるが、実際に図、

1571836044334

私たちは一つの文章で、この文が表示されます。実際には、我々はクラスを定義views.pyこの内部CLS、

自己へのCLSは、オブジェクト、オブジェクト点法、ポイントはクラスプロパティやメソッドでなければなりませんので、これはdispatch、この方法を実行するために考えられて(私たちは、書き込みやポストを得る)クラスメソッドである必要があり、

1571836200993

自己ここで(ので、我々は何の発送はありませんビューを見つけるために、つまり、見つけるために、親クラスに行ってきました、私たちのオブジェクトは、このメソッドの発送ではありませんので、我々は見つけるために、クラスに行く必要があり、クラスではありません私たちは、オブジェクトをインスタンス化することができますので、私たちは)時間を見つけるために、ソースコードを見て、直接ではなく、Ctrl +右クリックにしたいので、我々はビューで、以下の発送方法を発見しただろうさを探して

1571836730529

これは、CBVの全体の本質です。私たちは、最初にすべてのそれを取得したと判定され、それを見ることができrequest.method、ソースファイルの私自身のセットにない小文字の8つの要求

1571836886998

その後、ハンドラへの道を反映し、そしてによって割り当ては、我々が見てきたリターンの最終閉鎖前に、戻るに戻る場合はview、get要求を介して、as_view()が返されます場合は、POSTリクエストを超える場合には、取得していることas_view()は、アドレスが要求をのurls.pyれ、POSTに適合されurl(r'^test/', views.Test.get)url(r'^test/', views.Test.post)対応する機能を実行するであろう。手立て8大きな要求が存在しない場合、それは誤差関数を実行します

1571837521715

Djangoの設定ソースコード解析

ジャンゴでは、我々はその後、2つの設定ファイル、1は1がデフォルトの設定で、ユーザに提示され、ユーザが設定されている場合、ソースコードを設定する可変となる、と定義されているデフォルトの設定ファイルがあることを知っていますユーザ定義で、ユーザーが記述していないとは、それがデフォルトで設定されていない、通過します。

ここで私はそれを自分で書いた簡単な例です。

Copy# user_setting
A = True
D = 567

# setting
A = False
B = True
C = True
D = 123

# 源码
def my_set(self):
    set_lis = []
    set_re_lis = []
    for i in dir(setting):
        if i.isupper():
            set_lis.append(i)

    for j in dir(setting_re):
         if j.isupper():
         set_re_lis.append(j)
         setattr(setting, j, getattr(setting_re, j))
           

そのような意味は、種類の多くを簡素化するために、ユーザーとユーザープロファイルを達成することであることを意味し、自分自身で構成されていません

おすすめ

転載: www.cnblogs.com/oxtime/p/11735165.html