day50 DjangoのURLルーティングサプリメントとデータベースの操作

day50 DjangoのURLルーティングサプリメントとデータベースの操作

URLエイリアスと逆引き

ルートのエイリアス、場合パスの変更、ビュー機能と参照コードを変更する必要はありません。

書面でのURLのファイル:

url(r'^login/v2/', views.login,name='xx'),

逆解析の観点:

from django.urls import reverse
# 也可以直接从 django.shortcuts 中导入reverse,从源码来看,这两个reverse是相同的。

def login(request):
    print(reverse('xx'))  #/login/v2/
    if request.method == 'GET':
    return render(request,'login.html')
else:
    uname = request.POST.get('uname')
    pwd = request.POST.get('pwd')
    if uname == 'chao' and pwd == '123':
        return HttpResponse('ok')
    else:
        return redirect(reverse('xx'))  #使用反向解析

逆解析時にHTMLレンダリングテンプレート構文{% url 别名 %}

<form action="{% url 'xx' %}" method="post">    <!-- 这里是反向解析 -->
    {% csrf_token %}    <!-- csrf_token 用于防御跨站请求伪造-->
    用户名:<input type="text" name="uname">
    密码:<input type="text" name="pwd">
    <input type="submit">
</form>

ルートの配布を含めます

  1. プロジェクトフォルダurls.py以下のファイル書き込み
from django.conf.urls import url,include
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include('app01.urls',namespace='app01')),
    url(r'^app02/', include('app02.urls',namespace='app02')),
    #http://127.0.0.1:8000/index/
]
  1. 作成した各アプリケーション以下のアプリケーションフォルダ内のurls.pyファイル、でurls.py例えば、あなたのアプリケーションのファイルの各パスを書いapp01て、app02
app01:
    from django.conf.urls import url, include
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
        url(r'^index/', views.index,name='index'),
    ]
app02:
    from django.conf.urls import url, include
    from django.contrib import admin
    from app02 import views
    urlpatterns = [
        url(r'^index/', views.index,name='index'),
    ]
  1. このフォーマットを使用するときに様々なアプリケーションの各ビュー機能を書き込む、流通経路が必要。
return redirect('app01:index')

URL名前空間

基本的な執筆:

url(r'^app01/', include('app01.urls',namespace='app01')),

views.py書面でのファイル:

from django.urls import reverse
def index(request):
    print('app01反向解析:', reverse('app01:index'))
    # app01反向解析: /app02/index/
    return HttpResponse('app01-index')

html書面で:

{% url 'app01:login' %}

データベース操作

オブジェクトリレーショナルマッピング、オブジェクトリレーショナルマッピング

使用します。

  1. models.py次のドキュメントフォルダ対応するクラスで書かれたアプリケーションは、次の例を参照してください。
class UserInfo(models.Model):
    id = models.AutoField(primary_key=True)  
    username = models.CharField(max_length=10)
    password = models.CharField(max_length=32)
  1. MySQLのデータベースには、名前のorm01などのライブラリを作成するには:
create database orm01;
  1. 構成データベースを実行し、データベースがデフォルト軽量のSQLiteで使用されます。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

我々はする必要がありsettings.py、データベースが次の形式で構成され、文書化して下さい:

#连接mysql的配置:    
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'orm01',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'123'
    }
}
  1. プロジェクトフォルダ内__init__.pyのファイルは、以下を書くために指定するには、pymysql接続クライアントを
import pymysql
pymysql.install_as_MySQLdb()
  1. 実行データベース同期命令は、端末で実行されます
python manage.py makemigrations  #在migrations文件夹下面生成记录文件
python manage.py migrate         #执行记录文件

表が作成された、私たちのテーブル名は次のとおりです。クラス名の名前を小文字に_

ターミナルでは、あなたは我々だけのコマンドを介してデータベーステーブルを構築している見ることができます。

1574244736504

テーブルにおける欠失を変更して再検索データ

増加(作成)

モード1

obj = models.UserInfo(
    username='alex',
    password='sb'
)
obj.save()

実施例2(共通)

models.UserInfo.objects.create(
    username='一峰',
    password='666'
)

修正

モード1

models.UserInfo.objects.filter(id=1).update(
    username='alexxx',
    password='bigsb',
)

モード2

obj = models.UserInfo.objects.filter(id=1)[0]
obj.username = 'alex222'
obj.password = '11111'
obj.save()

一括作成します

list_obj = []
for i in range(10):
    obj = models.UserInfo(
        username='xx%s'%i,
        password='66%s'%i,
    )
    list_obj.append(obj)
print(list_obj)
models.UserInfo.objects.bulk_create(list_obj)

update_or_create そこに更新され、作成されていません

データがないか、または1つだけあるだけを見つけることができないことに留意すべきです。データの状態は、複数のエラーがある場合。

a,b = models.UserInfo.objects.update_or_create(
    username='alex',
    defaults={
        'id':20,
        'password':'ooooo',
        'age':84,
    }
)
print(a)  # 当前更新后的model对象,或者是你新增的记录的model对象
print(b)  # 新增就是True,查询就False

[削除]

models.UserInfo.objects.filter(id=1).delete()

お問い合わせ

単純な問合せ

    ret = models.UserInfo.objects.filter(id=1)
    print(ret) #<QuerySet [<UserInfo: UserInfo object>]> -- []
    obj = ret[0]
    print(obj.id,obj.username)

クエリメソッド

13のメソッドの合計が、あろう知っているであろう。今日はそのうちの3を議論します:

すべて
ret = models.UserInfo.objects.all()
フィルタとGET
ret = models.UserInfo.objects.get(age=18)
ret = models.UserInfo.objects.filter(age=180)
  • 唯一つのデータを取得し得ます。あなたはスーパーのデータを見つけるか、または2つのデータは文句を言うが、リクエストの結果を取得します見つけることができない場合は、そのモデルが返されたオブジェクトです。
# 1 UserInfo matching query does not exist. 啥也没查到
# 2 get() returned more than one UserInfo -- it returned 11!  结果多了,不行! 
  • fitlerが与えられていない、結果は対象のモデルであるコレクションクエリセットタイプ、です

おすすめ

転載: www.cnblogs.com/shuoliuchina/p/11900456.html