一、路由系统:

1、可以使用includ进行url分发(include里面加的就是app里面urls 的路径)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
from django.conf.urls import url, include
from django.contrib import admin


urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^app01/', include("APP01.urls")),
    url(r'^app02/', include("APP02.urls")),
]




from django.conf.urls import url, include
from django.contrib import admin
from APP01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
]

 

 

2、例如编辑的时候,以往是通过   

<a href="/app01/edit/?id={{ id }}">编辑</a>

   这样的方式发送到后端,现在可以使用路由中的正则来匹配,

如:

路由中:
url(r'^edit/(\w+)/', views.edit),

视图中:
def edit(request, name):
print(name)

模版中:
<a href="/app01/edit/{{ user }}">编辑</a>




3、路由系统中url正则组还可以自定义命名,视图中根据正则组名字来取
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+)', views.edit),
]
上述就是给两个正则组分别命名为p1、p2,需要注意的是,正则组如果采用位置就都采用位置,如果采用名字就都采用名字
路由正则尽量以$结尾,如果以 / 结尾的话 /前面可以无限写东西


4、伪静态(路由系统中url后缀加.html),目的是让用户感觉到是静态文件,加载很快的样子
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+).html/$', views.edit),
]



5、路由系统反向生成url(根据名字反向寻找url)
应用场景:比如说不同的用户有不同的权限能访问不同的url,如果把每个人能访问的url都放进数据库占空间,而直接放反向生成的别名就好了。

在python代码中可以应用:
路由中:
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+).html/$', views.edit, name="t2"),
]
视图中:
from django.urls import reverse
v = reverse("t2", kwargs={"a1": "alex", "a2": 18})
print(v)
 
在模版中可以应用:
<form method="post" action="{% url "t2" %}">
<input type="text">
</form>
 
二、ORM(当数据库的表中有数据又添加新列的时候,可以设置新列null=Treu或者default=“xxx”):
django中使用orm中的准备:

1、手动创建数据库

2、settings配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Test2',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '',
}
}

3、与settings同级的init文件中配置:
import pymysql
pymysql.install_as_MySQLdb()

4、在app的models中创建表
class userinfo(models.Model):
nid = models.AutoField(primary_key=True) (这一列可以不写,django会自动生成一列名称为“id”的列为主键,并且自增,并且int)
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)

5、在settings 中注册app信息
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'APP01',
]

6、输入生成表的命令

python manage.py makemigrations

python manage.py migrate


一对多关系表:
ug = models.ForeignKey("Userinfo_group", null=True)
创建完成后,自动关联到“Userinfo_group”这张表的主键上


双下划线大于小于:
user_list = models.Userinfo_group.objects.filter(id__lt=2)

orm基本操作:
# 单表增
# models.Usertype.objects.create(title="运营部")

# 单表删
# models.Usertype.objects.filter(id__gt=4).delete()

# 单表改
# models.Usertype.objects.filter(id=4).update(title="大牛部")

# 单表查
# result = models.Usertype.objects.filter(id=4).first()
# for i in result.userinfo_set.all():
# print(i.name, i.age)

# 一对多表增
# models.Userinfo.objects.create(name="alex", age="18", ut_id=4)

# 一对多表删
# models.Userinfo.objects.filter(id=4).delete()

# 一对多表改
# models.Userinfo.objects.filter(id=1).update(name="alexboy", age="90", ut_id=3)

# 一对多表查
# result = models.Userinfo.objects.filter(id=1).first()
# print(result.name, result.age, result.ut_id, result.ut.title)





# 查表什么也不加  取出的是query_set对象,里面是对象,可以直接  "." 出来属性, 想跨表查询的话for循环出来对象直接"."
result = models.Userinfo.objects.all()
print(result)


# 查表加values 取出的是query_set对象,里面是字典,想跨表查询的话values里面用双下划线
result = models.Userinfo.objects.all().values("id", "name", "ut__title")
print(result)


# 查表加values_list 取出的是query_set对象,里面是元组,想跨表查询的话values_list里面用双下划线
result = models.Userinfo.objects.all().values_list("id", "name", "ut__title")
print(result)
 
 








扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄