网页编程-Django(一)
业内:
GET:获取数据
POST:提交数据
上传单个数据: request.POST.get(‘’name名‘’)
上传多选数据: request.POST.getlist('name名')
上传文件:obj = request.FILES.get('name名')
obj.chunks() -生成器
for item in obj.chunks()
在form中加入enctype=‘multipart/form-data’
一、路由系统 FBV CBV
1,直接
url(r'^index/',views.index), url(r'^home/',views.Home.as_view())
2.正则表达式的url 'detail-(\d).html' 对应 参数 传入函数
url(r'detail-(\d+).html',views.detail)
url(r'detail-(?p<nid>\d+)-(?p<uid>\d+).html',views.detail)
def detail(request,*args,**kwargs)
3.name
对url路由关系进行命名,根据此名称构建想要的url
url(r'^indexdfd',views.insez,name='i1')
def func(request,*args,**kwargs):
from django.urls import reverse
url1 = reverse('i1')
xx.html {% url "i1" %}
url(r'^indexdfd/(\d+)',views.insez,name='i2')
def func(request,*args,**kwargs):
from django.urls import reverse
url2 = reverse('i2,args=(3,)')
4.url分发机制
from django.conf.urls import include
url(r'cmdb/',include('app01.url'))
url(r'monitor/',include('app02.url'))
5.默认值
6.命名空间
二、视图系统
返回数据:
render(request,"模板的文件路径",{数据名:数据})
redirect('URL')
HttpResponse('字符串')
四、ORM操作
django 默认用mysqldb 来连接
在__init__中加入
import pymysql
pymysql.install_as_MySQLdb()
创建表
1.根据类自动创建数据库表
#app 中的moudels.py
class UserInfo(models.model)
#用户名列,字符串类型,指定长度
username = models.CharField(max_lenth = 32)
python manage.py makemigrations #创建表的文件
python manage.py migrate #根据文件创建数据库表
如果出现:No changes detected
在settings 里 installAPP 中 加入 对应的app名称
如果依然无效,可python manage.py makemigrations <app名称> #创建表的文件
在setting 设置 DATABASES 可以选择哪种数据库
字段:
字符串类型
数字类型
时间类型
自增(primary_key = True)
字段参数:
null 是否为空/
default 默认值/
primary_key 主键
db_index 索引
unique 唯一索引
unique_for_date 对时间做唯一索引
auto_now 创建时,自动生成时间
auto_now_add 跟新时,自动生成时间 只用使用obj.save()才有用
choices django admin中显示下拉框,避免连表查询
blank django admin中表示是否为空
verbose_name django admin中显示字段中文
editable django admin中是否可被编辑
error_messages django admin中提示错误信息
help_text django admin中显示帮助信息
validators django form,自定义错误信息
2.根据类对数据库表中的数据进行各种操作
创建数据:
第一张方式:
models.UserInfo.objects.create(username='root',password= '123')
第二种方式:
obj = models.UserInfo(username='root',password= '123')
obj.save()
第三种方式:
dic = {‘username’:'root','password':'123'}
models.UserInfo.objects.create(**dic)
查找数据:
拿到所有数据:
result = models.UserInfo.objects.all() #QuerySet类型 [ obj, obj, obj(id,username,password) ]
for row in result:
print(row.id,row.username,row.password)
条件查询:
result = models.UserInfo.objects.filter(username='root')
for row in result:
print(row.id,row.username,row.password)
拿第一个:
result = models.UserInfo.objects.filter(username='root').first()
拿个数:
result = models.UserInfo.objects.filter(username='root').count()
删除内容:
models.UserInfo.objects.filter(id=4).delete()
跟新内容:
models.UserInfo.objects.all().update(password='777')
models.UserInfo.objects.filter(id=3).update(password='777')
外键:
在class UserInfo 中加入:
user_group = models.ForeignKey('UserGroup',to_field='uid')
创建时:
user_group_id = 1
或:
user_group = models.UserGroup.objects.filter(id=1).first() #对象
外键:
user_group = models.ForeignKey('UserGroup',to_field = 'uid',default=1)
存入sql中为:user_group_id
获取方法:
user_list = Userinfo.objects.all()
for row in user_list:
print(row.user_group_id)
print(row.user_group) #row.user_group代表一个对象
#row.user_group_id ==== row.user_group.uid
添加方法:
model.Userinfo.objects.create(
username = 'root'
password = '123'
email = '3@qq.com'
user_group_id = 1 ) 或者:
model.Userinfo.objects.create(
username = 'root'
password = '123'
email = '3@qq.com'
user_group = models.UserGroup.objects.filter(id=1).first() )
外键实例
一个主机管理的实例:
#主机管理
class Host(models.Model):
nid = models.AutoField(primary_key) = True
hostname = models.CharField(max_length=32,db_index=True)
ip = models.GenericIPAddressField(db_index=True) #加上索引,ipaddressfield已经被generic替换了
port = models.IntegerField()
business = models.ForeignKey(to = 'Business',to_field='id') class Business(models.Model):
#id
caption = models.CharField(max_length=32)
code = models.CharField(max_length=32,null=True,default = ='sa')
通过外键操作:
#获取
v = models.Business.objects.all() #以对象方式
#或者获取指定列,内部元素是字典:
v = models.Business.objects.all().values('id','caption') #以字典方式
#获取元祖[(1,运维),(2,开发)]
v = models.Business.objects.all().values_list('id','caption') #只能按序列查找 #获取到的一个对象,如果不存在就报错
models.Business.objects.get(id=1)
models.Business.objects.filter(id=1) 不存在就为none 外键:
v = models.Host.objects.filter(nid__gt=0)
v[0].business.caption ----->通过.进行跨表查询 使用下划线获取外键内的值 (以字典形式)
v2 =models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b_caption') {{ forloop.counter }} 循环计数
{{ forloop.counter0 }}
{{ forloop.revcounter }}
{{ forloop.revcounter0 }}
{{ forloop.last }} 是否是最后一个循环
{{ forloop.first }} 是否是第一个循环 {{ forloop.parentloop }} 是否是最后一个
网页编程-Django(一)的更多相关文章
- 网页编程-django前传
1.js正则表达式 http://www.cnblogs.com/wupeiqi/articles/5602773.html test - 判断字符串是否符合规定的正则 正则表达式: rep = ...
- 网页编程工具:EditPlus
字体:Consolas EditPlus,很土很简单很强大的网页编程工具 http://www.editplus.com/download.html 下载 http://www.cnblogs.co ...
- java基础54 网络通讯的三要素及网络/网页编程的概述
1.概述 网络编程注意解决的是计算机(手机.平板.....)之间的数据传输问题. 网络编程:不需要基于html基础上,就可以进行数据间的传输.比如:FeiQ.QQ.微信..... ...
- 网页编程技术与实例 PDF扫描版
本书主要包括:Web的概念,使用网页编辑工具制作网页,HTML语言的基本结构,JavaScrip和VBScript脚本语言的编程方法,ASP的概念,ASP对象的属性.方法和事件,SQL语言,数据库建议 ...
- 10分钟搭建一个小型网页(python django)(hello world!)
10分钟搭建一个小型网页(python django)(hello world!) 1.安装django pip install django 安装成功后,在Scripts目录下存在django-ad ...
- Batsing的网页编程规范(HTML/CSS/JS/PHP)
特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...
- django学习记录--第一个网页“hello django”
一.安装django 下面两种方法任选其一 1.pip或easy_install 安装 pip install django easy_install django 2.到django官网(https ...
- BAT之间的区别(学点网页编程,然后开始研究)
A: 阿里不就是靠网页起家的吗? T: 腾讯靠客户端. B: 百度是靠网页背后的算法技术支持- 最近网页技术又发布了很多新功能,而现在网页功能也已经很强大了. 不知道自己是不是老了,总觉得不喜欢网页( ...
- 网页编程-Djiango(二)
一.初始Ajax ajax的写法: $.ajax({ url:'/host', type:'POST' data:{'k1':123,'k2':'root'} success:function(dat ...
随机推荐
- 【bzoj3210】花神的浇花集会 旋转坐标系
题目描述 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花 ...
- cssText批量修改样式
cssText所有浏览器都支持. cssText 的使用 obj.style.cssText = " width:200px;position:absolute;left:100px;&qu ...
- BZOJ 4077 Messenger
Messenger [问题描述] alice和bob各自在两条折线上行进,一个邮递员要从alice那拿一个包裹,并以直线移动到bob处,alice和bob.邮递员的速度均为1单位/s,问邮递员最少要走 ...
- 超级钢琴 BZOJ 2006
超级钢琴 [问题描述] 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度 ...
- C#:判断当前线程所处状态&委托
1.线程状态ThreadState 在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象. ThreadState 为线程定义了一组所有可能的执 ...
- Scrapy学习-11-Selector对象使用
Selector使用 使用背景 我需要使用类似spider项目中,response使用的xpath和css获取页面指定数据,但因为爬取页面较小我们不想创建一个spider项目时,就可以使用scrapy ...
- VUE之命令行报错:Expected indentation of 4 spaces but found 6
使用vue时候,经常被一大片警告惊呆了,这是webpack默认的语法检查插件ESLint在做警告, [ESLint是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确.风格统一的代码] 但是我 ...
- (4)DataTable
引用 using System.Data; 创建DataTable DataTable dt = new DataTable(); //指定表明,当把这个table添加到dataset时你就可以用da ...
- [Python Cookbook] Numpy Array Manipulation
1. Reshape: The np.reshape() method will give a new shape to an array without changing its data. Not ...
- guava之cache
转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = Cach ...