ディレクトリ
ORMの関係構築
最初のベーステーブルを作成し、外部キーとはみなされません
一般的にアウトラインに必要な場合に使用される一つ(テーブルが可能であったであろう、スプリット2つのテーブルになった、それは1になります)
多くの外部キーフィールドは、「多くの」テーブルに行く設定されています
外部キー関係を設定するには、別のテーブルを確立するために多くの必要性に多くの
図書館管理システム
テーブルの上に
from django.db import models
# 先创建基表,暂不考虑外键
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8, decimal_places=2)
publish = models.Foreignkey(to='Publish')
# to用来指代跟哪张表有关系 默认关联的就是表的主键字段
プレステーブル:
class publish(models.Model):
title = models.Charfield(max_length=32)
age = models.EmailField()
テーブルの上に:
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
同期データテーブルのフィールドに作成された時間対多の外部キーフィールドには、自動的にサフィックスを追加します_ ID
あなたは_ IDを追加する場合は、ORMは後で_ IDを追加します
あなたは多くの外部キーフィールドを書くよう_idを追加するときにスマートになろうとしません。
建てられたが、いずれかの当事者は、あなたがより高い周波数のクエリのいずれかで構築することを勧告することができる外部キーフィールドの間に、多くの関係
どちらか一方に建てられた1つの関係テーブルの外部キーフィールドの一つは、しかし、あなたはより高い周波数のクエリのいずれかで構築することをお勧めすることができます
author = models.ManyToManyField(to='Author')
# django orm会自动帮你创建书籍 和作者的第三张关系表
# author这个字段是一个虚拟字段 不能在表中展示出来 仅仅只是起到一个告诉orm 建第三章表的关系的作用
ライフサイクルフローチャート要求ジャンゴ
urls.pyルーティング層
ルーティング試合
長い正規表現がコンテンツに合わせることができるようとして、URLの最初のパラメータは、正規表現で
すぐに戻ってダウン機能を見るのではなく試合を継続実行されます
# 取消django自动让浏览器加斜杠的功能
APPEND_SLASH = False # 该参数默认是True
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls), # url第一个参数是一个正则表达式
url(r'^test/$', views.test), # 一旦正则表达式能够匹配到内容 会立刻结束匹配关系 直接执行后面对应的函数
url(r'^testadd/$', views.testadd),
]
# django匹配路由的规律
# 不加斜杠 先匹配一次试试 如果匹配不上 会让浏览器重定向 加一个斜杠再来一次 如果还匹配不上 才会报错
"""
路由匹配值匹配url部分
不匹配?后面的get携带的参数
"""
不明グループ:
関数のパラメータとしての位置にパケットの内容に一致する正規表現は、ビューに渡されます。
url(r'^test/([0-9]{4})/', views.test)
test() takes 1 positional argument but 2 were given
あなたは、機能の観点から内容を一致するように正規表現の位置パラメータをルーティングパケットを持っている場合は、パケットの内容に次の正規表現のマッチングがビュー関数に渡されるときに実行
試験(要求、パケットの内容に一致する正規表現)
よく知られているグループ:
パケットの内容に正規表現マッチはビュー関数に渡されたキーパラメータとして使用されます
url(r'^testadd/(?P<year>\d+)/', views.testadd),
testadd() got an unexpected keyword argument 'year'
キーワード引数はビュー関数に渡されたとして、一致するコンテンツがコンテンツに正規表現のマッチング内でグループ化される時、あなたのルートおよびパケットにパケットがあるだからを某とき
testadd(要求は、年=パケット内の陽性の発現は、コンテンツにマッチします)
有名な匿名グループの使用は、我々は機能ビューを呼び出す前に、関数に追加のパラメータを渡すことができます
注:グループ化既知および未知のグループが混在することはできません
パケットが、同じ場合は、複数回の使用することができる
未知のは、複数持つことができます:URL(R '^インデックス/ (\ dは+)/(\ dは+)/'、views.index)、
複数があるかもしれない知ら:URL(R 「^インデックス/(?P
それは混合ではありません
逆引き参照
別名に応じて動的に結果を直接対応する結果にアクセスできるURLを解析し、プロセスが逆解析であります
最初のケース:ルートは正規表現ではありませんが、死に直接書き込まれます
url(r'^home/', views.home,name='xxx'), # 给路由与视图函数对应关系起别名
前端反向解析
{% url 'xxx' %}
后端反向解析
from django.shortcuts import render,HttpResponse,redirect,reverse
url = reverse('xxx')
後者の場合:手動で定期的な試合の内容を指定するために必要なもの解析時に参照不明のパケットを逆転
url(r'^home/(\d+)/', views.home,name='xxx'), # 给路由与视图函数对应关系起别名
前端反向解析
<p><a href="{% url 'xxx' 12 %}">111</a></p>
<p><a href="{% url 'xxx' 1324 %}">111</a></p>
<p><a href="{% url 'xxx' 14324 %}">111</a></p>
<p><a href="{% url 'xxx' 1234 %}">111</a></p>
后端反向解析
url = reverse('xxx',args=(1,))
url1 = reverse('xxx',args=(3213,))
url2 = reverse('xxx',args=(2132131,))
# 手动传入的参数 只需要满足能够被正则表达式匹配到即可
第三の場合:
逆引き参照の有名なパケットを手動でどのような定期的な一致を指定する必要があり、コンテンツの解析
有名な匿名のグループのように、グループ化することができ、逆解析
が、以下のように、この文言の大半正式にする必要がありますが。
url(r'^home/(?P<year>\d+)/', views.home,name='xxx'),
# 给路由与视图函数对应关系起别名
前端
# 可以直接用无名分组的情况
<p><a href="{% url 'xxx' 12 %}">111</a></p>
# 你也可以规范写法
<p><a href="{% url 'xxx' year=1232 %}">111</a></p> # 了解即可
后端
# 可以直接用无名分组的情况
url = reverse('xxx',args=(1,))
# 你也可以规范写法
url = reverse('xxx',kwargs={'year':213123}) # 了解即可
以编辑功能为例
url(r'^edit_user/(\d+)/',views.edit_user,name='edit')
def edit_user(request,edit_id):
# edit_id就是用户想要编辑数据主键值
pass
{% for user_obj in user_list %}
<a href='/edit_user/{{user_obj.id}}/'>编辑</a>
<a href='{% url 'edit' user_obj.id %}'>编辑</a>
{% endfor %}
ルート分布(******)
前提
すべてのDjangoアプリでは、独自の独立したurls.pyテンプレートの静的を持つことができます
ジャンゴ開発プロジェクトが完全にグループ化するマルチプレイヤーを開発するために、互いに干渉しないことができるようになりますので、使用上の機能を
自分のアプリのみ開発するすべての人を
グループリーダーを唯一の空の内部のDjangoプロジェクトの開発を統合する必要があるアプリの所有者
およびコンフィギュレーションファイルに設定を登録して、ルートの配布を使用するには、より大規模なプロジェクトで一緒にステッチを完了するために、アプリに統合されます
総経路があまりにも多くの関係を一致させる場合を解決するためにルート分布プロジェクトであります
(リクエストが来た後の全ルート間のない対応総ルートがライブ一致しない作りとちょうどタスクの配布を行い、ルートの配布を使用して
転送し、その後ハンドルに対応したアプリへのリクエストをアクセスするためにどのアプリのみの機能をお願いすると)
from app01 import urls as app01_urls
from app02 import urls as app02_urls
urlpatterns = [
url(r'^admin/', admin.site.urls), # url第一个参数是一个正则表达式
# 路由分发
url(r'^app01/',include(app01_urls)), # 路由分发需要注意的实现 就是总路由里面不能以$结尾
url(r'^app02/',include(app02_urls)),
]
# 子路由
from django.conf.urls import url
from app01 import views
urlpatterns = [
url('^reg/',views.reg)
]
from django.conf.urls import url
from app02 import views
urlpatterns = [
url('^reg/',views.reg)
]
最省事的写法(******)
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
名前空間
複数のアプリが名前空間を作成することができ、各アプリに分散ルーティングするとき、あなたがやっている別名以来の競合が発生した場合に表示されたら
、あなたはその後、エンド名前空間の検索エイリアスで解決逆にする際に選択することができます
url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02'))
# 后端
print(reverse('app01:reg'))
print(reverse('app02:reg'))
# 前端
<a href="{% url 'app01:reg' %}"></a>
<a href="{% url 'app02:reg' %}"></a>
実際には、時には、上記の名前空間の知識は完全にあなただけの紛争全体の時間を必要とエイリアスはDjangoのプロジェクトになることができないことを保証することはできません。某統一アプリケーション名と接頭辞を
urlpatterns = [
url(r'^reg/',views.reg,name='app02_reg')
]
urlpatterns = [
url('^reg/',views.reg,name='app01_reg')
]
擬似静的
非常に良いSEO検索エンジンのクエリの頻度と強度ウィッシュリストに順に、静的なWebページを装った動的なWebページ
いわゆる検索エンジンません、実際に巨大な爬虫類
到着した最適化されませんが、どんなに良いかRMBプレーヤー
仮想環境
モジュールへのモジュールは、プロジェクトに必要な機器のすべての項目を必要とせず、インストールされません
それぞれの再ダウンロード純粋なPythonインタプリタにあなたに似た仮想環境を作成します
(Nは、単一のマシン上で複数の仮想環境を持つことができます)をインストールするために使用したもの上記のプロジェクトの後に
あなたの無制限の仮想マシンを作成していません環境
Djangoのバージョンの違い
django1.X django2.X
urls.py中路由匹配的方法有区别
django2.X用的是path
urlpatterns = [
path('admin/', admin.site.urls),
]
django1.X用的是url
urlpatterns = [
url(r'^reg.html',views.reg,name='app02_reg')
]
# 区别 django2.X里面path第一个参数不是正则也不支持正则 写什么就匹配什么
# 虽然path不支持正则 感觉也好用 django2.X还有一个re_path的方法 该方法就是你django1.X里面url
虽然path不支持 但是它提供了五种转换器 能够将匹配到的数据自动转黄成对应的类型
除了有默认五种转换器之外 还支持你自定义转换器
ビューレイヤー
ファイルをアップロードする方法バックエンドゲットファイルはフォーム形成
フォーム発現転送ファイル注意事項
1.methodを投稿するように変更する必要があります
FORMDATAに2.enctype形式を
使用すると、設定が要求された構成ファイルのコメントを送信する必要があるときに使用後端に向けて早期のポストをミドルウェアCSRFのうち