Day11 Django
#Create on 2017/4/15
第四课 Django基础 34minutes
数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
2、模版
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,'templates'),
)
3、静态文件
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
第五课 Django框架揭秘 34minutes
第六课 Django路由系统 36minutes
动态URL配置
url(r'^list/(\d*)', admin.site.urls)
def list(request,id) 用ID来得到URL后面的数字
可以通过URL来接收数据,在后台查看接收的内容---测试字母
如果URL有两个参数,按顺序来
url(r'^list/(\d*)/(\d*)', admin.site.urls)
url(r'^list/(?P<name>\d*)/(?P<id>\d*)', list)
def list(request,name,id) ----上面的name必须和函数中的参数匹配
给参数默认值,如果没有ID,用{'id':222}设定默认值
url(r'^list/(?P<name>\d*)', list,{'id':222})
用以下方式可匹配一个或两个参数
url(r'^list/(?P<name>\d*)/(?P<id>\d*)/$', list)
url(r'^list/(?P<name>\d*)/$', list,{'id':222})
将URL分散到所有APP中
url(r'^list/', include('list.urls'))
第7课 Django路由系统二 2minutes
第8课 Django路由系统三 12minutes
通过路由反射的方式来做URL,简化路由---参考网页
第9课 Django的Model创建数据库表一 20minutes
第10课 Django的Model创建数据库表二 64minutes
from django.db import models
2、models.CharField 字符串字段
必须 max_length 参数
3、models.BooleanField 布尔类型=tinyint(1)
不能为空,Blank=True
5、models.DateField 日期类型 date
对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField 日期类型 datetime
同DateField的参数
8、models.EmailField 字符串类型(正则表达式邮箱) =varchar
对字符串进行正则表达式
9、models.FloatField 浮点类型 = double
10、models.IntegerField 整形
12、models.IPAddressField 字符串类型(ip4正则表达式)
13、models.GenericIPAddressField 字符串类型(ip4和ip6是可选的)
参数protocol可以是:both、ipv4、ipv6
验证时,会根据设置报错
19、models.TextField 字符串=longtext
20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串,地址正则表达式
设置默认数据
models.TextField(defalut='11')
修改表结构后,再更新时有两个方案:1在线设定值,2在Models里设置default
Django里操作数据库没有手写的性能好
Django通过ORM来操作数据库
第11课 Django的Model数据库增删改查 90minutes
一对一,一对多关系需要学习
1、null=True 数据库中字段是否可以为空
2、blank=True django的 Admin 中添加数据时是否可允许空值
3、primary_key = False 主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
auto_now 自动创建---无论添加或修改,都是当前操作的时间
auto_now_add 自动创建---永远是创建时的时间
5、choices---自动生成一个表格,放在内存中
GENDER_CHOICE = (
(u'M', u'Male'),
(u'F', u'Female'),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default 默认值
8、verbose_name Admin中字段的显示名称
9、name|db_column 数据库中的字段名称
10、unique=True 不允许重复
11、db_index = True 数据库索引
12、editable=True 在Admin里是否可编辑
13、error_messages=None 错误提示
14、auto_created=False 自动创建
15、help_text 在Admin中提示帮助信息
16、validators=[]
17、upload-to 上传文件
file = models.FileField(upload_to = './upload/')
修改错误提示
cerate_date = models.DateTimeField(auto_now_add=True,error_messages={'invalid':'没有任何的输入'})
def add(request,name):
方式一:
obj = user(Name=name)
obj.save()
方式二:
user.objects.create(Name=name)
return HttpResponse('add')
def delete(request,id):
user.objects.get(id=id).delete()
return HttpResponse('del')
def update(request,id,name):
方式一:获取一个对象
obj = user.objects.get(id=id)
obj.Name = name
obj.save()
方式二:获取多个对象的集合Query_set
user.objects.filter(Name__contains=name).update(Name = name)
return HttpResponse('update')
def get(request,name):
obj = user.objects.filter(Name__contains=name)
return HttpResponse(obj)
filter(id__gt)大于
filter(id__gt)小于
filter(id__contains=id) 包括id关键字
filter(id__icontains=id) 忽略大小写
user.objects.all()[0:2] 取前两条数据,相当字符分片方法,用于分页
user.objects.all().order_by('id') 正常排序,倒序前加-: '-id'
user.objects.all().order_by('id').values('id') 取某一字段内容,以字典显示values_list以列表显示
第12课 Django模板语言 100minutes
模板中也有自己的语言,该语言可以实现数据展示
{{ item }}
{% for item in item_list %} <a>{{ item }}</a> {% endfor %}
forloop.counter
forloop.first
forloop.last
{% if ordered_warranty %} {% else %} {% endif %}
母板:{% block title %}{% endblock %}
子板:{% extends "base.html" %}
{% block title %}{% endblock %}
帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}
{% ifequal user '字符 '%} 判断是否相等
通过simple_tag实现模版语言中的帮助方法
a、在app中创建templatetags文件夹
b、创建任意 .py 文件,如:xx.py
#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_safe
from django.template.base import resolve_variable, Node, TemplateSyntaxError
register = template.Library()
@register.simple_tag
def my_simple_time(v1,v2,v3):
return v1 + v2 + v3
@register.simple_tag
def my_input(id,arg):
result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
{% load xxx %} -temptags文件名
d、使用simple_tag
{% my_simple_time 1 2 3%}后面数字为参数,多个用空格分开
{% my_input 'id_username' 'hide'%}
e、再settings中配置当前app,不然django无法找到自定义的simple_tag
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
)
Form,在Model里写,等同Model
可以模板里直接写:{{form}}或者{{form.as_table}}
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
data = form.cleaned_data
#form.save()
else:
print form.errors.ad_json()
需要学习一下
第13课 Django内容回顾和作业 9minutes
作业:主机管理
数据库里有主机和主机组
用户组,用户,多对多关系
主机表和用户组一对多关系
用户注册和用户登录
主机信息展示:IP,硬件等
需要用母板