django初步了解2
表的字段增删改查
新增的字段
1.直接提供默认值 default
2.设置改字段能够为空 null=True
注意的是 不要轻易的注释models.py中任何跟数据库相关的代码
主要是跟数据库相关的代码 你在处理的时候必定要当心谨慎
数据的增删改查
数据的查
get()
1.条件存在的状况下 获取的直接是数据对象自己
2.条件不存在的状况下 会直接报错 因此不推荐你使用get方法查询数据
filter()
1.条件存在的状况下 获取到的是一个能够当作列表的数据 列表里面放的才是一个个数据对象自己
2.条件不存在的状况下 并不会报错 返回的是一个能够当作空列表的数据
3.filter括号内能够写多个参数逗号隔开 这多个参数在查询的时候 是and关系
4.filter的结果支持索引取值 可是不支持负数 而且不推荐你使用索引 推荐你使用它封装好的方法 first取第一个数据对象
数据的增
1.create()
1.括号内些关键字参数的形式 建立数据
2.该方法会有一个返回值 返回值就是当前对象自己
2.利用对象点方法的方式
user_obj = User(username='jason')
user_obj.save() # 将当前对象保存到数据库中
数据的改
1.先查询出来,而后.取值直接赋值,以后save()保存
2.用updata(修改的键=修改的值)
数据的删
1.先查询出数据对象,以后调用.delete()方法删除
2.不能直接用models.users.objects.delete(),为了安全起见,先查再删
反向解析和分组
根据某一个东西 动态解析出一个结果 该结果能够直接访问对应的url
url(r'^test_add/', views.testadd,name='xxx')
前端解析
{% url 'xxx' %}
后端解析
from django.shortcuts import render,HttpResponse,redirect,reverse
url = reverse('xxx')
无名分组反向解析
url(r'^test_addsajdsjkahdkjasjkdh/(\d+)/', views.testadd,name='xxx'),
前端解析
<a href="{% url 'xxx' 1 %}">222</a>
后端解析
url = reverse('xxx',args=(1,))
有名分子反向解析
url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>\d+)/', views.testadd,name='xxx'),
前端解析
<a href="{% url 'xxx' 1 %}">222</a>
<a href="{% url 'xxx' year=1 %}">222</a>
后端解析
url = reverse('xxx',args=(1,))
url = reverse('xxx',kwargs={'year':123})
注意 反向解析的别名 必定不要重复
路由分发
django里面的app能够有本身的static文件,templates文件夹,urls.py(******)
项目名下面的urls.py再也不作路由与视图函数对应关系
而是作一个中转站 只负责将请求分发到不一样的app中
而后在app的urls.py完成路由与视图函数的对应关系
from django.conf.urls import url,include
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:index'))
print(reverse('app02:index'))
一般状况下 起别名的时候 前面能够加上你的应用名
伪静态
将动态网页伪装成是静态的
这样作的目的是为了提升搜索引擎的SEO查询优先级
搜索在收录网站的时候 会优先收录看上去像是静态文件的资源
可是不管你怎么使用伪静态进行优化 你也干不过RMB玩家
虚拟环境
一般针对不一样的项目 只会安装该项目所用的模块 用不到的一律不装
不一样的项目有专门的解释器环境与之对应
每建立一个虚拟环境 就相似于从新下载了一个纯净的python解释器
虚拟环境不要建立太多个