一、路由系统

1、静态路由

  1. from app01 import views
  2. urlpatterns = [
  3. #url(r'^admin/', admin.site.urls),
  4. url(r'^home/', views.home),
  5. ]

2、动态路由

  1. from app01 import views
  2. urlpatterns = [
  3. url(r'^index/(\d+)', views.index),
  4.  
  5. url(r'^page/(\d+)/(\d+)', views.page),
  6. ]

  (1)按照顺序

  将匹配的参数按顺序传给n2,n1

  1. url(r'^page/(\d+)/(\d+)', views.page),
  1. def page(request,n2,n1):
  2. return HttpResponse(n2+n1)

  (2)模版方式

  将匹配的参数传给指定的形式参数,视图参数的名字必须与指定的名字相同

  1. url(r'^page/(?P<n1>\d+)/(?P<n2>\d+)', views.page),

3、二级路由

  根据匹配的参数去找对应app下的urls进行处理

  1. url(r'^admin/', include('app01.urls')),
  2. url(r'^login/', include('app02.urls')),

4、往视图方法传额外参数

  1. url(r'^page/(\d+)/(\d+)', views.page, {'name': 'zhangsan'}),

二、views

简单返回一个字符串

  1. from django.shortcuts import HttpResponse
  2. from django.shortcuts import render
  3.  
  4. def home(request):
  5. return HttpResponse("home")

返回一个html

  1. from django.shortcuts import HttpResponse
  2. from django.shortcuts import render
  3.  
  4. def home(request):
  5. return render(request,'index.html')

三、数据库增删改查

在models.py中创建类

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. class UserInfo(models.Model):
  5. name = models.CharField(max_length=32)
  6. age = models.IntegerField()

执行

  1. python manage.py makemigrations
  1. python manage.py migrate

  表创建成功

增、删、改、查

  1. # -*- coding: UTF-8 -*-
  2. from django.shortcuts import HttpResponse
  3. from app01 import models
  4. # Create your views here.
  5. def db_handle(request):
  6. #增
  7. #
  8. models.UserInfo.objects.create(name='zhangsan',age=18)
  9. #
  10. dic={"name":"lisi","age":20}
  11. models.UserInfo.objects.create(**dic)
  12. #
  13. obj=models.UserInfo(name='zhangsan',age=18)
  14. obj.save()
  15.  
  16. #删
  17. models.UserInfo.objects.filter(name="zhangsan").delete()
  18.  
  19. #改
  20. #
  21. models.UserInfo.objects.filter(name="zhangsan").update(age=26) #把所有名字是zhangsan的年龄改为26
  22. #
  23. obj = models.UserInfo.objects.get(name="zhangsan")
  24. obj.name="wangwu"
  25. obj.save()
  26.  
  27. #查
  28.  
  29. aa=models.UserInfo.objects.all()
  30. for i in aa:
  31. print(i.name)
  32.  
  33. models.UserInfo.objects.all()[:10] #切片操作,获取10个人
  34. models.UserInfo.objects.get(name="zhangsan") #get是用来获取一个对象
  35. #大于小于
  36. models.UserInfo.objects.filter(id__gt=1) # 获取id大于1的值
  37. models.UserInfo.objects.filter(id__lt=10) # 获取id小于10的值
  38. models.UserInfo.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
  39.  
  40. # in
  41. models.UserInfo.objects.filter(id__in=[1,2,3]) # 获取id等于1、2、3的数据
  42. #not in
  43. models.UserInfo.objects.exclude(id__in=[1,2,3])
  44.  
  45. models.UserInfo.objects.filter(name="zhangsan")
  46. models.UserInfo.objects.filter(name__iexact="zhangsan") #不区分大小写
  47. models.UserInfo.objects.filter(name="zhangsan").first() #获取第一个
  48.  
  49. models.UserInfo.objects.filter(name__contains="zhang") # 名称中包含 "zhang"的人,name__icontains="abc":不区分大小写
  50.  
  51. models.UserInfo.objects.filter(name__regex="^zhang") #正则表达式查询,name__iregex="^abc":不区分大小写
  52.  
  53. return HttpResponse("ok")

聚合查询  https://docs.djangoproject.com/en/1.9/topics/db/aggregation/

其他字段

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

其他参数

  1. 1null=True #数据库中字段是否可以为空
  2. 2blank=True #django的 Admin 中添加数据时是否可允许空值
  3. 3primary_key = False #主键,对AutoField设置主键后,就会代替原来的自增 id 列
  4. 4auto_now #自动创建---无论添加或修改,都是当前操作的时间
  5.   auto_now_add #自动创建---永远是创建时的时间
  6. 5choices
  7. GENDER_CHOICE = (
  8. (u'M', u'Male'),
  9. (u'F', u'Female'),
  10. )
  11. gender = models.CharField(max_length=2,choices = GENDER_CHOICE) #可以让用户选择
  12. 6max_length #长度
  13. 7default  #默认值
  14. 8verbose_name  #Admin中字段的显示名称
  15. 9name|db_column  #数据库中的字段名称
  16. 10unique=True  #不允许重复
  17. 11db_index = True  #数据库索引
  18. 12editable=True  #在Admin里是否可编辑
  19. 13error_messages=None  #错误提示
  20. 14auto_created=False  #自动创建
  21. 15help_text  #在Admin中提示帮助信息
  22. 16validators=[] #自己加验证规则
  23. 17upload-to #文件上传时保存的文件夹路径

连表关系:

  一对多,models.ForeignKey()

  一对一,models.OneToOneField()

  多对多,authors = models.ManyToManyField()

四、模版

  模板中也有自己的语言,该语言可以实现数据展示,上面一直是用HttpResponse来简单的把内容显示到网页

模版渲染

  1、在templates下创建一个home.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <h1>HOME</h1>
  9. <h2>{{ name }}</h2>
  10. <h2>{{ age }}</h2>
  11. </body>
  12. </html>

  2、在views.py中写好函数admin

  1. from django.shortcuts import render
  2.  
  3. def admin(request):
  4. dic = {"name":"zhangsan","age":18}
  5. return render(request,'home.html',dic)

  3、urls.py将视图函数对应到网址

  1. from app01 import views
  2. urlpatterns = [
  3. url(r'^admin/', views.admin),
  4. ]

  运行后就能在页面显示相应的内容

模板语言

  for和if

  1. {% for item in item_list %}
      <a>{{ item }}</a>
    {% endfor %}
  2.  
  3. {% if ordered_warranty %}
    {% else %}
    {% endif %}

实例:

views.py

  1. def admin(request):
  2. user_obj=[
  3. {"username":"zhangsan","age":18},
  4. {"username":"lisi","age":20}
  5. ]
  6.  
  7. return render(request,'home.html',{"user_obj":user_obj})

在模版中使用它

  1. <ul>
  2. {% for item in user_obj %}
  3. {% if item.username == "zhangsan" %}
  4. <li style="background-color: brown">username:{{ item.username }},age:{{ item.age }}</li>
  5. {% else %}
  6. <li>username:{{ item.username }},age:{{ item.age }}</li>
  7. {% endif %}
  8. {% endfor %}
  9. </ul>

for循环中的其他功能

  1. forloop.counter 索引从 1 开始算
  2. forloop.counter0 索引从 0 开始算
  3. forloop.revcounter 索引从最大长度到 1
  4. forloop.revcounter0 索引从最大长度到 0
  5. forloop.first 当遍历的元素为第一项时为真
  6. forloop.last 当遍历的元素为最后一项时为真
  7. forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

divisibleby

  1. {{ value|divisibleby:"" }}//表示如果value能被2整除,为true
  1. {% for item in user_obj %}
  2. {% if forloop.counter|divisibleby:"" %}
  3. <li style="background-color: brown">username:{{ item.username }},age:{{ item.age }}</li>
  4. {% else %}
  5. <li>username:{{ item.username }},age:{{ item.age }}</li>
  6. {% endif %}
  7. {% endfor %}

还可以遍历字典

views.py

  1. def admin(request):
  2. dic = {"name":"zhangsan","age":18}
  3. return render(request,'home.html',{"info_dic":dic})

home.html

  1. {% for key,value in info_dic.items %}
  2. {{ key }}:{{ value }}
  3. {% endfor%}

母板

  网站模板的设计,一般网站都有一些通用的部分,比如 导航,底部,访问统计代码

可以写一个 base.html 来包含这些通用文件作为母板

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{% block title %}标题{% endblock %}</title>
  6. </head>
  7. <body>
  8. {% block content %}
  9. <div>所有继承自这个模板的,都会显示这里的默认内容。</div>
  10. {% endblock %}
  11. </body>
  12. </html>

子板引用母板

  1. {% extends "base.html" %} #读取base.html作为模板
  2.  
  3. {% block title %}{% endblock %} #填入模板里title的内容
  4.  
  5. {% block content%}{% endblock %} #填入模板里content的内容

如果包含很多共用部分想拿出来,可以使用include,就是把一些网页共用的部分拿出来,重复利用,在用到的地方include进去。其它的页面继承母板 base.html 就好了,继承后的模板也可以在 block 块中 include 其它的模板文件。

在templates下创建一个文件夹include,并在include下创建demo.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{% block title %}标题{% endblock %}</title>
  6. </head>
  7. <body>
  8. {% block content %}
  9. <div>所有继承自这个模板的,都会显示这里的默认内容。</div>
  10. {% endblock %}
  11.  
  12. {% include '/include/demo.html' %}<!-会直接把demo.html的内容写入这里->
  13. </body>
  14. </html>

自定义template tags

(1)、在app中创建templatetags模块(必须为templatetags)

(2)、创建任意 xx.py 文件,如:test.py

把下面内容写入test.py

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. from django import template
  4. from django.utils.safestring import mark_safe
  5.  
  6. register = template.Library()
  7.  
  8. @register.simple_tag
  9. def my_simple_time(v1,v2,v3): #自己定义的方法
  10. return v1 + v2 + v3
  11.  
  12. @register.simple_tag
  13. def my_input(id,arg): #自己定义的方法
  14. result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
  15. return mark_safe(result)

(3)、在使用自定义simple_tag的html文件之前导入创建的 test.py 文件名

  1. {% load xx %}

(4)、使用simple_tag

  1. {% my_simple_time 1 2 3%}
  2. {% my_input 'id_username' 'hide'%}

(5)、在settings中配置当前app,不然django无法找到自定义的simple_tag

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app01',
  9. ]

详细:https://docs.djangoproject.com/es/1.9/howto/custom-template-tags/

五、admin

  django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查

使用django admin 所需步骤:

1、创建后台管理员

  1. python manage.py createsuperuser

2、配置后台管理url

  1. url(r'^admin/', include(admin.site.urls))

3、在admin中配置

  1. from django.contrib import admin
  2. from app01 import models
  3.  
  4. admin.site.register(models.UserInfo)
  5. admin.site.register(models.Book)

4、写一个__unicode__ 函数(或 __str__函数)用来在后台显示定义的名字

  1. class UserInfo(models.Model):
  2. name = models.CharField(max_length=32)
  3. age = models.IntegerField()
  4.  
  5. def __unicode__(self):
  6. return self.name

5、list_display 就用来配置要显示的字段

  1. from django.contrib import admin
  2. # Register your models here.
  3. from app01 import models
  4. class userinfo_admin(admin.ModelAdmin):
  5. list_display = ("name","age",)
  6.  
  7. admin.site.register(models.UserInfo,userinfo_admin)

6、search_fields 添加搜索功能

  1. #搜索
  2. search_fields = ('name', 'age',) #这样就可以按照name或age进行搜索了
  1. from django.contrib import admin
  2. # Register your models here.
  3. from app01 import models
  4. class userinfo_admin(admin.ModelAdmin):
  5. list_display = ("name","age",)
  6. search_fields = ('name', 'age',)
  7.  
  8. admin.site.register(models.UserInfo,userinfo_admin)

7、list_filter  筛选功能

  1. from django.contrib import admin
  2. # Register your models here.
  3. from app01 import models
  4. class userinfo_admin(admin.ModelAdmin):
  5. list_display = ("name","age",)
  6. search_fields = ('name', 'age',) #搜索
  7. list_filter = ('name', 'age',) #筛选
  8.  
  9. admin.site.register(models.UserInfo,userinfo_admin)

8、修改

  1. list_editable = ('name', 'age',)#当前页面可以直接修改的字段

9、其他定制

models

  1. # -*- coding: UTF-8 -*-
  2. from django.db import models
  3. from django.utils.html import format_html #format_html用于把字符串转换为html显示
  4. # Create your models here.
  5. class UserInfo(models.Model):
  6. name = models.CharField(max_length=32)
  7. age = models.IntegerField()
  8.  
  9. grade_choices= (("pass","及格"),
  10. ("fail","不及格"),
  11. ("no_result","无成绩"),)
  12. grade = models.CharField(choices=grade_choices,max_length=32,default="no_result")
  13.  
  14. def __unicode__(self):
  15. return self.name
  16.  
  17. def colored_status(self):
  18. if self.grade == "pass":
  19. format_td = format_html('<span style="padding:2px;background-color:green;color:white">及格</span>')
  20. elif self.grade == "fail":
  21. format_td = format_html('<span style="padding:2px;background-color:red;color:white">不及格</span>')
  22. elif self.grade == "no_result":
  23. format_td = format_html('<span style="padding:2px;background-color:yellow;color:white">无成绩</span>')
  24.  
  25. return format_td
  26.  
  27. colored_status.short_description = "成绩" #修改该列的名字

admin

  1. # -*- coding: UTF-8 -*-
  2. from django.contrib import admin
  3. # Register your models here.
  4. from app01 import models
  5. class userinfo_admin(admin.ModelAdmin):
  6. list_display = ("name","age","colored_status")#把models里定义的函数名colored_status加入这里
  7. #search_fields = ('name', 'age',) #搜索
  8. #list_filter = ('name', 'age',) #筛选
  9. #list_editable = ('name', 'age',) #修改
  10.  
  11. admin.site.register(models.UserInfo,userinfo_admin)

Django基础的更多相关文章

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

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

  2. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  3. python的django基础篇

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

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

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

  5. Django基础(一)

    Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...

  6. python3之Django基础篇

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

  7. DJango 基础 (1)

    django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...

  8. Django基础和基本使用

    Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...

  9. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  10. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

随机推荐

  1. 国家以及国家语言的json数据格式,提供给网友参考。

    目前接触到一个需求,需要全球主要国家的选择以及语言的选择,如下图: 这是国家选项 这是语言的选项: 很简单有木有? 本来打算直接给文件,但是好像没有文件上传,所以就提供一个思路和代码,你们照着弄吧. ...

  2. python零碎知识点一

    dir(object),列出对象所有可以用的的方法(参数可以为任意对象,例如class,func等) >>>dir('str') ['__add__', '__class__', ' ...

  3. 关于IIF多个条件的用法

    IIF(yyzt = 0, '生产', IIF(yyzt = 10,'入库',IIF(yyzt=20,'销售经理',IIF(yyzt=30,'用户','其他'))))

  4. Linux基本操作命令

    Linux基本操作命令 首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos.我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如do ...

  5. mssql java 运行

    public void rlgy() throws IOException { Statement sql; ResultSet rs; String driverName = "com.m ...

  6. WINDOWS下PhoneGap(Cordova)安装笔记

    1.首先下载Node.js  安装nodejs很简单直接点击安装文件下一步直至成功即可,安装notejs的同时npm也会同时安装 成功后打开notejs的命令行工具 输入“node -v”," ...

  7. JavaWeb三大组件——过滤器的运行机制理解

    过滤器Filter 文章前言:本文侧重实用和理解. 一.过滤器的概念. lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有 ...

  8. spring-amqp 动态创建queue、exchange、binding

    pom.xml <!-- mq 依赖 --> <dependency> <groupId>com.rabbitmq</groupId> <arti ...

  9. 解决UIScrollView把uitableviewcell的点击事件屏蔽

    cell中 [self.contentView addSubview:self.scrollView]; self.scrollView.userInteractionEnabled = NO; [s ...

  10. 利用jQuery来扩展一个瀑布流插件

      简单了解jQuery.fn.extend() jQuery.fn.extend()函数用于为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法). (截图来自jQuery文档) 为了更清晰 ...