ロドリゴ・イゼクソン・ドス・サントス・レイチテーブルの関係は無名の逆解析ルートの配布をグループ化しています

テーブルのリレーションシップのORMを確立する方法

多くの多くの

多くの

マンツーマン

共感は表分析の上に立って、その後、別の分析に立ちました

class Book(models.Model):
    title = models.CharField(max_length=32)
    # 小数总共八位 小数占两位
    price = models.DecimalField(max_digits=8,decimal_places=2)

    # 书跟出版社是一对多 并且书是多的一方 所以外键字段健在书表中
    publish_id = models.ForeignKey(to='Publish')  
    # to用来指代跟哪张表有关系 默认关联的就是表的主键字段
    """
    一对多外键字段 创建的时候 同步到数据中 表字段会自动加_id后缀
    如果你自己加了_id 我orm头铁 再在后面加一个_id
    所以你在写一对多外键字段的时候 不要自作聪明的加_id
    """



    # 书跟作者是多对多的关系 外键字段建在任意一方都可以  但是建议你建在查询频率较高的那一方
    author = models.ManyToManyField(to='Author')  
    # django orm会自动帮你创建书籍 和作者的第三张关系表
    # author这个字段是一个虚拟字段 不能在表中展示出来 仅仅只是起到一个高速orm 建第三章表的关系的作用


class Publish(models.Model):
    title = models.CharField(max_length=32)
    email = models.EmailField()


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
# 一对一的表关系 外键字段建在任意一方都可以    但是建议你建在查询频率较高的那一方
    author_detail = models.OneToOneField(to='Author_detail')  # fk + unique
    """
    一对一外键字段 创建的时候 同步到数据中 表字段会自动加_id后缀

    如果你自己加了_id 我orm头铁 再在后面加一个_id

    所以你在写一对一外键字段的时候 不要自作聪明的加_id
    """
class Author_detail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)  

ライフサイクルフローチャート要求ジャンゴ

ライフサイクルフローチャート要求ジャンゴ

Djangoはブラウザが機能を大幅に削減することができ、自動的にキャンセル:

APPEND_SLASH = False  # 该参数默认是True
urlpatterns = [
            # url第一个参数是一个正则表达式
            url(r'^admin/', admin.site.urls),
    
    # 一旦正则表达式能够匹配到内容 会立刻结束匹配关系 直接执行后面对应的函数
            url(r'^test/$', views.test),  
            url(r'^testadd/$', views.testadd),
        ]
        # django匹配路由的规律
        # 不加斜杠 先匹配一次试试 如果匹配不上 会让浏览器重定向 加一个斜杠再来一次 如果还匹配不上 才会报错
        """
        路由匹配值匹配url部分
        不匹配?后面的get携带的参数
        """

不明グループ

位置パラメータの関数がビューに渡されるパケット内の陽性発現は、コンテンツを一致します

url(r'^text/[0-9]{4})/',views.text)
error:
    test() takes 1 positional argument but 2 were given
# 执行视图函数的时候 会将分组内正则表达式匹配到的内容当做位置参数传递给视图函数  test(request,分组内正则表达式匹配到的内容)

有名なグループ化

url(r'^textadd/(?P<year>\d+)/',views.testadd),

error:
    testadd() got an unexpected keyword argument 'year'
# 当你的路由中有分组并且给分组起了别名 那么在匹配内容的时候
        # 会将分组内的正则表达式匹配到的内容当做关键字参数传递给视图函数  testadd(request,year=分组内的正则表达式匹配到的内容)

ご注意ください

不能混合使用!!!
    但是同一种分组的情况下 可以使用多次
    无名可以有多个
    有名可以有多个
    但是就是不能混合使用
            url(r'^index/(\d+)/(\d+)/', views.index),
            url(r'^index/(?P<args>\d+)/(?P<year>\d+)/', views.index),

逆引き参照

直接対応する他のURLにアクセスすることができる動的解析結果によれば、エイリアス

最初のケース

ルーティングは、死に直接書き込み、正規表現ではありません

urls.py:
    url(r'^home/',views.home.name='xxx')    # 给路由于视图函数对应关系起别名

# 前端反向解析
    {% url 'xxx'%}
# 后端反向解析
    form django.shortcuts import render,HttpResponse,redirect,reverse
    url=reverse('xxx')

後者の場合

手動で定期的な試合の内容を指定するために必要なもの解析する際に、未知のパケットを、ルックアップリバース

urls.py:
    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,))
# 手动传入的参数 只需要满足能够被正则表达式匹配到即可

第三のケース

手動で定期的な試合の内容を指定するために必要なもの解析するとき、有名なグループ化を参照リバース

逆解析では、未知のパケットのよく知られたグループとしてすることができ

しかし、ほとんどの正式なライティング:

urls.py:
    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})  # 了解即可

ルートの配布

前提

'''
在django中所有的app都可以有自己独立的urls.py  templates static
正是由于上面的特点 你用django开发项目就能够完全做到多人分组开发 互相不干扰
每个人只开发自己的app
小组长只需要将所有人开发的app整合到一个空的django项目里面
然后在settings配置文件注册 再利用路由分发将多个app整合到一起即可完成大项目的拼接

路由分发解决的就是项目的总路由匹配关系过多的情况

'''
from app01 import urls as app01_urls
from app02 import urls as app02_urls


urlpatterns = [
    # url第一个参数是一个正则表达式
    url(r'^admin/', admin.site.urls),  
    # 路由分发
    # 路由分发需要注意的实现 就是总路由里面不能以$结尾
    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>

# 参考建议:起别名的时候统一加上应用名前缀
urlpatterns = [
    url(r'^reg/',views.reg,name='app02_reg')
]

urlpatterns = [
    url('^reg/',views.reg,name='app01_reg')
]

擬似静的

将一个动态网页伪装成一个静态网页 以此来挺好搜索引擎SEO查询频率和搜藏力度

所谓的搜索引擎其实就是一个也别巨大的爬虫程序

优化的再厉害还是抵不过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支持 但是它提供了五种转换器  能够将匹配到的数据自动转黄成对应的类型

    # 除了有默认五种转换器之外 还支持你自定义转换器

ビューレイヤー

'''
form表单上传文件 后端如何获取文件
    form表达传文件需要注意的事项
        1.method必须改成post
        2.enctype该成formdata格式
前期你在使用post朝后端发请求的时候 需要去settings配置文件中注释掉一个中间件csrf
    
'''

おすすめ

転載: www.cnblogs.com/hj59988326/p/11931498.html