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-阶段总结的更多相关文章

  1. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  2. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  3. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  4. 01:django基础篇

    Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...

  5. python的django基础篇

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

  6. python3之Django基础篇

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

  7. WebBug靶场基础篇 — 03

    基础篇 6 - 16 关... 在记录之前,先说一件事 = =! 小学生真多 = =!好心提供一个靶场,玩玩就算了,他挂黑页 ?现在好了,以后这个靶场不对外啊!你高兴了?爽了吧? 都是新手过来的,好心 ...

  8. Django基础篇之数据库选择及相关操作

    在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 ...

  9. Django基础篇--Models

    在Django中创建与数据库的链接并调用数据库的数据是很关键的步骤,那么怎么实现这个过程呢? 下面这篇文章简单梳理了一下创建Model层的过程和应用 模型-Models 首先需要理解什么是模型? 模型 ...

  10. Web框架django基础篇

    基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...

随机推荐

  1. [BZOJ3812]主旋律:状压DP+容斥原理

    分析 Miskcoo orz 令\(f[S]\)表示使得\(S\)这个点集强连通的方案数. 然后呢?不会了 考虑到将一个有向图SCC缩点后,得到的新图是一个DAG,所以我们可以类比带标号DAG计数的解 ...

  2. node.js npm 操作 模块化开发 cnpm镜像安装

    模块(包) 传统引入 js 的缺点 整个网页,我们写了一个 js 文件,所有的特效都在里面 耦合度太高,代码之间关联性太强,不便于后期维护 变量容易 全局污染 如果将 复杂的 js 文件,拆成多个功能 ...

  3. 微信小程序 API 网络(ajax)

    网络 API 类似于 ajax 向服务器请求网络地址,唯一不同的是这个请求有很多的规则,且必须向服务器上请求,不能在本地请求 网络 发送请求: wx.request() 发起https网络请求 参数: ...

  4. webpack安装低于4版本(没有配置webpack.config.js)

    webpack安装低于4版本(没有配置webpack.config.js) webpack 无需配置输出参数-o 低版本  1.初始化项目 npm init -y 初始化项目 2.安装webpack@ ...

  5. EasyHook

    EasyHook实用指南 所谓实用指南就是全是干货,没那么多虚头巴脑的东西,真正要用的人会发现对自己有用的东西,浅尝辄止的人看起来会不知所云. FileMon自己实做的过程中遇到的问题: 1. exe ...

  6. C++ 左值与右值

    https://baike.baidu.com/item/%E5%B7%A6%E5%80%BC%E4%B8%8E%E5%8F%B3%E5%80%BC/5537417?fr=aladdin https: ...

  7. robot framework 接口自动化之登录

    网络不便,好久没更了,颓废好久,惭愧 目录 1.安装必须的库 2.固定格式介绍 3.完成一个登录 1.安装必须的库 requestsLibrary.requests安装 1.pip install r ...

  8. Jmeter之内存溢出解决办法

    使用Jmeter进行压力测试会遇到一段时间后报内存溢出的错误,导致Jmeter卡死.这是因为Jmeter默认的HEAP配置的太小了,解决办法如下: 1.Windows环境   修改jmeter.bat ...

  9. 使用Inception-v3进行图像分类

    https://blog.csdn.net/sinat_27382047/article/details/80534234 https://www.jianshu.com/p/cc830a6ed54b ...

  10. Vue-3D-Model:用简单的方式来展示三维模型

    为什么做这个组件 我经常听到前端朋友们抱怨,在网页上展示三维模型太麻烦了.但是这方面的需求又有很多,例如做房地产的需要展示户型.卖汽车的需要展示汽车模型等. 在网页上展示三维模型就只能用WebGL技术 ...