1.路由系统

a.普通路由

 url(r'^index$', views.index),

b.正则路由

 url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),

c.app路由(需要在app内创建urls.py文件再次分路由)

 url(r'^web/', include('app01.urls')),

2.模版

a.母板,多个页面同时需要使用同一个页面的大部分功能时使用

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.pg-header{
height: 48px;
background-color: cadetblue ;
}
.pg-body{
min-height: 400px;
}
.pg-body .body-menu{
width: 20%;
float: left;
}
.pg-body .body-content{
width: 80%;
float: left;
}
.pg-footer{
height: 100px;
background-color: bisque ;
}
</style>
</head>
<body>
<div class="pg-header"></div>
<div class="pg-body">
<div class="body-menu">
<a href="/web/userinfo">用户信息</a>
<a href="/web/assets">资产信息</a>
</div>
<div class="body-content">
{% block body %}{% endblock %} // 这里就是可以随意替换的部分
</div>
</div>
<div class="pg-footer"></div>
</body>
</html>
 {% extends 'layout.html' %}
{% block body %}
<ul>
{% for item in userinfo_list %}
<li>{{ item.username }}, {{ item.salary }}</li>
{% endfor %}
</ul>
{% endblock %}
 {% extends 'layout.html' %}
{% block body %}
<table>
{% for item in assets_list %}
<tr>
<td>{{ item.hostname }}</td>
<td>{{ item.port }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}

b.导入子板,就是重复利用同一段页面代码,类似于python里的函数,类,减少冗余

 {% include 'son.html' %}

c.自定义模块

在app中创建templatetags模块(名字必须!)

创建任意 .py 文件,如:xx.py(名字随意)

 from django import template

 register = template.Library()       # 必须写

 @register.filter                    # 必须写
def f3(value):
if value == 'vvv':
return True
else:
return False @register.simple_tag # 必须写
def f4(value):
if value == 'vvv':
return True
else:
return False

在settings中注册app

html中导入xx.py

 {% load xx %}

使用simple_tag或者filter

 {% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if k1|f3 %}
<h1>TRUE</h1>
{% else %}
<h1>FALSE</h1>
{% endif %}
</body>
</html>
 def template(request):
return render(request, 'template.html', {'k1': 'vvv', 'k2': [11, 22, 33], 'k3': {'nid': 222, 'name': 'bfmq'}})

simple_tag与filter的区别:

filter:不支持传入多个参数,但是可以从后台解决

simple_tag:不支持if条件判断

3.modal

a.字段

1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制
23、models.ImageField 图片
24、models.FilePathField 文件

b.参数

null 如果设置为 True 的话,Django将在数据库中存储空值为 NULL 。默认为 False 。
blank 如果是 True ,该字段允许留空,默认为 False 。
choices一个包含双元素元组的可迭代的对象,用于给字段提供选项。
db_column当前字段在数据库中对应的列的名字。
db_index如果为 True ,Django会在创建表格(比如运行 manage.py syncdb )时对这一列创建数据库索引。
default字段的默认值
editable 如果为 False ,这个字段在管理界面或表单里将不能编辑。默认为 True 。
help_text 在管理界面表单对象里显示在字段下面的额外帮助文本。
primary_key如果为 True ,这个字段就会成为模型的主键。
radio_admin 默认地,对于 ForeignKey 或者拥有 choices 设置的字段,Django管理界面会使用列表选择框(<select>)。如果 radio_admin 设置为 True 的话,Django就会使用单选按钮界面。
unique如果是 True ,这个字段的值在整个表中必须是唯一的。
unique_for_date 把它的值设成一个 DataField 或者 DateTimeField 的字段的名称,可以确保字段在这个日期内不会出现重复值。
unique_for_month 和 unique_for_date 类似,只是要求字段在指定字段的月份内唯一。
unique_for_year 和 unique_for_date 及 unique_for_month 类似,只是时间范围变成了一年。
verbose_name 除 ForeignKey 、 ManyToManyField 和 OneToOneField 之外的字段都接受一个详细名称作为第一个位置参数。

c.连表操作

一对一:models.OneToOneField(OneModel)

一对多:models.ForeignKey(ColorDic)

多对多:authors = models.ManyToManyField(Author)

 应用场景:
一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。
一对多:当一张表中创建一行数据时,有一个单选的下拉框
多对多:在某表中创建一行数据是,有一个可以多选的下拉框。

d.数据库操作

 增加:创建实例,并调用save
更新:a.获取实例,再sava;b.update(指定列)
删除:a. filter().delete(); b.all().delete()
获取:a. 单个=get(id=1) ;b. 所有 = all()
过滤:filter(name='xxx');filter(name__contains='');(id__in = [1,2,3]) ;
icontains(大小写无关的LIKE),startswith和endswith, 还有range(SQLBETWEEN查询)'gt', 'in', 'isnull', 'endswith', 'contains', 'lt', 'startswith', 'iendswith', 'icontains','range', 'istartswith'
排序:order_by("name") =asc ;order_by("-name")=desc
返回第n-m条:第n条[0];前两条[0:2]
指定映射:values
数量:count()
聚合:from django.db.models import Min,Max,Sum objects.all().aggregate(Max('guest_id'))
原始SQL
cursor = connection.cursor()
cursor.execute('''SELECT DISTINCT first_name ROM people_person WHERE last_name = %s""", ['Lennon'])
row = cursor.fetchone()

python第十八天-----Django基础的更多相关文章

  1. Python自动化开发 - Django基础

    本节内容 一.什么是web框架 二.MVC和MTV视图 三.Django基本命令 四.路由配置系统 五.编写视图 六.Template 七.ORM 一.什么是web框架 对于所有的web应用,本质上其 ...

  2. python之路 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  3. Python学习-day19 django基础篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  4. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  5. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  6. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  7. 图解Python 【第十二篇】:Django 基础

    本节内容一览表: Django基础:http://www.ziqiangxuetang.com/django/django-tutorial.html 一.Django简介 Django文件介绍:ht ...

  8. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  9. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

随机推荐

  1. iOS8下bundle路径变更

    iOS8下路径变为: /Users/username/Library/Developer/CoreSimulator/Devices/786824FF-6D4C-4D73-884A-696514481 ...

  2. apache httpd.conf 参数详解

    由于网站需要,需要配置多个虚拟主机,但是apache主机的参数太多,记不住,下面做一下总结 归纳: ServerRoot:apache安装位置 Listen:服务器监听的端口号 LoadModule: ...

  3. ORACLE插入DATE类型字段

    1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...

  4. Row_Number()显示行号

    SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee Row_Number ...

  5. PSP个人项目耗时记录

    估计这个任务需要多少时间: 计划 估计用时 估计这个任务需要多少时间 500min 开发 450min 需求分析 120min 生成设计文档 20min 设计复审 30miin 代码规范 10min ...

  6. css secrets----multiple borders

    原始文档: https://www.zybuluo.com/freeethy/note/193574 box-shadow solution 只能实现solid border box-shadow表现 ...

  7. Protocol buffers 介绍

    Protocol buffers和mxl一样在序列化数据结构时很灵活.高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单.目前protocol buffers支持C++.java和p ...

  8. MFC创建文件和文件夹

    1.使用PathIsDirectory判断文件夹是否存在需要引用下面头文件: #include "shlwapi.h"#pragma comment(lib,"shlwa ...

  9. 一张图说懂java中 private default protected public 的区别

    private:修饰完全隐藏类的成员,这样,就不能从类的外边直接访问他们,我们提供set和get方法,保证类中数据域的安全. default:指默认修饰符,什么都不加,实际上它限制的范围就是一个包内可 ...

  10. iOS返回一个前面没有0,小数点后保留两位的数字字符串

    /* * 处理一个数字加小数点的字符串,前面无0,保留两位.网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的. */ -(NSString*)getTheCorrectN ...