django基础篇03-阶段总结
1.django的生命周期:
url -> 路由系统 -> 视图函数(获取模版 + 数据 =>渲染) -> 返回字符串
2.路由系统:
/index/ ->函数或类.as_view()
/detail/(\d) ->函数(参数)或 类.as_view()(参数)
/detail/(?P<nid>\d+) ->函数(参数)或 类.as_view()(参数)
/detail/ -> include('app01.urls')
/detail/ name='a1' -> include('app01.urls')
视图views.py
from django.shortcuts imoport reverse # 获取原路径
reverse('a1')
模版
{% url 'a1' %}
3. 视图
FBV:函数 path(r'index',views.index)
def index(request,*args,**kwargs):
pass
CBV:类 path(r'index',views.Index.as_view())
class Index(views.view):
pass
获取用户的数据:
request.GET.get(xxx)
request.POST.get(xxx)
reqest.FILES.get(xxxx)
obj = request.FILES.get('xxx')
f = open('simple01.txt','wb')
for chunk in obj.chunks():
f.write(chunk)
f.close()
# checkbox的值的获取
request.GET.getlist('xxx'
给用户返回数据的形式:
render(request,'xxx.html',{arg0:1234,arg1:[1,2,3,4]})
HtppResponse(字符串)
redirect('URL')
4.模版语言
render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
<html>
<body>
<h1>{{ obj }}</h1>
<h1>{{ k1.1 }}</h1>
<h1>{{ k2.name }}</h1>
{% for v in k2.values %}
<h1>{{ v }}</h1>
{% endfor %}
</body>
</html>
5.ORM
a. 创建类和字段
class UserInfo(models.Model):
name = models.CharField(max_length=32)
age = models.IntgerField()
终端执行:
python3 manage.py makemerigations
python3 manage.py merigate
注意:setting.py文件中,是否INSTALL_APPS是否注册app?
b. 操作
增 以下两种方式都可以
models.UserInfo.objects.create(name='xm01',age=23) obj = models.UserInfo(name='xm02',age=34)
obj.save()
删
models.UserInfo.objects.filter(name='xm01').delete()
改
models.UserInfo.objects.filter('xm02').update(name='xm01')
user_info = {'name':'xm03','age':34}
models.UserInfo.object.filter(id__gt=0).update(**user_info)
查
# 查询全部 返回QuerySet对象
models.UserInfo.objects.all()
# 条件查询
models.UserInfo.objects.filter(name='xm01')
# and的使用
models.UserInfo.objects.filter(name='xm01',age=23)
# 查询某些字段
models.UserInfo.objects.all().values('name') # 获取一个对象,如果不存在则报错
models.UserInfo.objects.get(id=1)
或者 如果存在则返回对象,否则返回None
obj = models.UserInfo.objects.filter(id=1).first()
外键
# caption 1:普通用户 2:VIP用户 3:游客
class UserType(models.Model):
caption = models.CharFileld(max_length=32) class User(models.Model):
age = models.IntegerField()
name = models.CharField(max_length=64)
# 约束
user_type = models.ForeignKey(to='UserType' to_field='id')
6.Ajax
基本使用
<script src="../static/jquery-1.12.4.js"></script>
<script>
$.ajax({
url:'/orm.html',
data: {'account': 'xm02','pwd':''},
dataType: 'json',
traditional: true,
success: function (data) { }
})
</script>
dataType:返回的参数格式为json数据类型
traditoinal: 参数中包含数组的时候,将此参数设置为true,这样数据才会被传递,当遇到参数为字典的时候,需要通过JSON.stringify(dict)
7.一对多
外键
from django.db import models class UserGroup(models.Model):
name = models.CharField(max_length=32) class UserInfo(models.Model):
username = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
gender = models.CharField(max_length=4)
group_type = models.ForeignKey(UserGroup,to_field='id',on_delete=models.CASCADE)
用法:
# 创建数据
# models.UserGroup.objects.create(name='python')
# models.UserGroup.objects.create(name='Ruby')
# obj = models.UserGroup(name='Object-C')
# obj.save() models.UserInfo.objects.create(username='xm01',gender='',pwd='',group_type_id=1) for row in models.UserInfo.objects.all():
print(row.username,row.pwd,row.gender,row.group_type,sep='\t')
print(row.group_type.name) obj = models.UserInfo.objects.filter(group_type_id=1)
print(obj)
obj = models.UserInfo.objects.filter(id__gt=1).values('username','gender','group_type__name')
print(obj)
for row in obj:
print(row['username'],row['gender'],row['group_type__name'],sep='\t')
# 输出
# xm01 123456 0 UserGroup object (1)
# python
# <QuerySet [<UserInfo: UserInfo object (1)>]>
# <QuerySet [{'username': 'xm02', 'gender': '1', 'group_type__name': 'Ruby'}, {'username': 'xm03', 'gender': '0', 'group_type__name': 'Object-C'}]
# xm02 1 Ruby
# xm03 0 Object-C
UserInfo中的group_type为UserGroup类型的对象,而且外键关联,默认生成 xxx_id字段作为新关联其他模型的字段,如果获取外表的字段,需要通过xxx__op可以获取外表的op字段值
8.多对多
a.自定义关系表
from django.db import models class Host(models.Model):
nid = models.AutoField(primary_key=True)
hostname = models.CharField(max_length=32, db_index=True)
ip = models.GenericIPAddressField(protocol="ipv4", db_index=True)
port = models.IntegerField() class Application(models.Model):
name = models.CharField(max_length=32)
h = models.ManyToManyField(Host)
此时django会自动生成第三张表,表名和表结构如下:


调用方法如下
# obj = Application.objects.filter(id=1).first()
# obj.h.add(1)
# obj.h.add(2,3)
# obj.h.add(*[1,2,3]) # obj.h.remove(1)
# obj.h.clear() # obj.h.set([2]) # 返回Host类型的QuerySet对象
qset = obj.h.all()
for row in qset:
print(row.hostname,row.ip,row.port,sep='\t')
django基础篇03-阶段总结的更多相关文章
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
- 01: Django基础篇
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...
- 01:django基础篇
Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- WebBug靶场基础篇 — 03
基础篇 6 - 16 关... 在记录之前,先说一件事 = =! 小学生真多 = =!好心提供一个靶场,玩玩就算了,他挂黑页 ?现在好了,以后这个靶场不对外啊!你高兴了?爽了吧? 都是新手过来的,好心 ...
- Django基础篇之数据库选择及相关操作
在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 ...
- Django基础篇--Models
在Django中创建与数据库的链接并调用数据库的数据是很关键的步骤,那么怎么实现这个过程呢? 下面这篇文章简单梳理了一下创建Model层的过程和应用 模型-Models 首先需要理解什么是模型? 模型 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
随机推荐
- Redis高级命令及特性(安全性)
高级命令 keys * : 返回满足的所有键 ,可以模糊匹配 exists :是否存在指定的key,存在返回1,不存在返回0 exprie:设置某个key的过期时间 ttl:查看剩余时 ...
- aws常用命令
EC2 挂载 EBS linux 查看块设备: lsblk 格式化磁盘: sudo mkfs -t ext4 /dev/xvdb 挂载卷: sudo mount /dev/xvdb /mnt/mydi ...
- NOIP2018复赛游记
Day -oo (这里是负无穷啦qwq) 为了NOIP2018,我已经准备了好久 暑假的封闭式训练,国庆后停掉了晚自习,距NOIP一周时更是停掉了全天的课...... 我像是一个圆,在近乎无限的空间里 ...
- 关于viewpager的滑动问题
今天碰到很诡异的问题,viewpager中放置至少三张图片的时候能够正常实现循环滑动,只放置一张或者两张的时候就不行. 后来发现问题症结:viewpager需要保证既可以向左滑动,又可以向右滑动,因此 ...
- 后盾网lavarel视频项目---页面post方式提交之后动态弹出错误信息
后盾网lavarel视频项目---页面post方式提交之后动态弹出错误信息 一.总结 一句话总结: 1.思路和我想的一样,有错误的时候弹出提示错误消息的模态框就好,没有错误的时候不管它 2.把模态框的 ...
- jquery版本轮播图(es5版本,兼容高)
优势:基于es5,兼容高.切换动画css配置,轻量,不包含多余代码,可扩展性很高,多个轮播图不会冲突,可配置独有namespace 注: 1.项目需要所写,所以只写了页码的切换,未写上一页下一页按钮, ...
- Docker部署MySQL8并实现远程连接
1. 拉取镜像 docker pull mysql 2. 运行镜像启动容器 docker run --name mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=y ...
- ABAP基本数据类型
ABAP 程序中共包含8种基本数据类型: 数据类型名称 描述 属 性 C Character Text(字符类型) 默认长度=1,默认值=blank,最大长度无限制 N Numeric Text(数 ...
- 深度学习之美(张玉宏)——第四章 人生苦短我用python
1 函数参数 (1)收集参数:以一个星号*加上形参名的方式,表示这个函数的实参个数不定,可能0个可能n个. def varParaFun(name,*param): print('位置参数是:',na ...
- Lesson 4 The double life of Alfred Bloggs
There are two type of people in the society. People who do manual works can higher payment than peop ...