Django入门必知必会操作
一、Django基础必备三件套
HttpRseponse
内部传入一个字符串参数,返回给浏览器。
在app目录下的views.py添加函数,添加函数之前必须在urls.py添加函数对应关系,否则访问不到
def login(request):
# 业务逻辑代码
return HttpResponse('welcome to GuangDong')
render
request : 浏览器请求相关的信息
除request参数外还接受一个待渲染的html模板文件和一个保存具体数据的字典参数。总共用三个参数
render(request, template_name, context=None)
将数据填充进模板文件,最后把结果返回给浏览器。(类似于之前用的jinja2模块)
def reg(request):
# print(request)
# print(request.__dict__)
user_dict = {'name':'cxk','sex':'girl'}
# return render(request,'reg.html')
# 给模板传值的方式1:
# 将user_dict传递给reg.html页面 页面上通过xxx就能够获取到该字典
return render(request,'reg.html',{'user':user_dict})
# 给模板传值的方式2:
# 这种情况是针对有多个字典的情况下,
# locals()将当前名称空间中所有的变量名传递给html页面,在html页面用user_dict.name方式取值
# 但是会有一个问题:影响效率。
print(locals())
return render(request,'reg.html',locals())
redirect
接受一个URL参数,表示跳转到指定的URL。相当于重定向。
当我在浏览器输入http://127.0.0.1:8000/home时,他就会自动跳转到https://www.autohome.com.cn
def home(request):
# return redirect('/index')
return redirect('https://www.autohome.com.cn')
def index(request):
return HttpResponse('index')
二、Django连接数据库
第一步:从settings配置文件中配置
# django会自带一个小型的sqlite3数据库,我们只需改回我们用的mysql就行了
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'user_info', # 数据库名
'USER':'tomjoy',
'PASSWORD':'123456',
'HOST':3306,
'CHARSET':'utf8'
}
}
第二步:
django默认使用的是mysqldb连接数据库 但是该模块不支持了
所以需要告诉django不要用mysqldb,得用pymysql连接
你可以在项目名下面的__init__.py也可以在应用名下面的__init__.py文件中指定
import pymysql
pymysql.install_as_MySQLdb()
三、request对象取值方式
在views.py中写函数的时候,每个函数必须接受一个参数叫request,这个request就是浏览器发送请求的请求数据,django将他封装成一个对象。
1.获取post请求携带的数据
request.POST
2.获取get请求携带的数据
request.GET
发现get和post在后端获取用户数据的时候 规律是一样的
print(request.POST)
print(request.POST.get('username'))
print(request.POST.get('password'))
# <QueryDict: {'username': ['admin'], 'password': ['123']}>
# admin
# 123
如果是一条数据有多条值,情况又不一样了
print(request.POST)
print(request.POST.get('username'))
print(request.POST.get('password'))
print(request.POST.get('hobby'))
print(request.POST.getlist('hobby'))
# <QueryDict: {'username': ['admin'], 'password': ['123'],'hobby': ['sing', 'dance', 'basketball']}>
# admin
# 123
# basketball
如果还用get('hobby'),他默认只取最后一个
要用getlist() 才能将完整的列表取出来
四、Django ORM简介
ORM即对象关系映射(Object Relational Mapping)
python: mysql:
类 即 数据库中的表
对象 即 表的记录
对象.属性 即 记录的某个字段对应的值

优点:
能够让一个不会数据库操作的人 也能够简单快捷去使用数据库
缺点:
由于封装程度太高 可能会导致程序的执行效率偏低,有时候 结合项目需求 可能需 要你手写sql语句
注意事项
1.django的orm不会自动帮你创建库,库需要你自己手动创建
只会自动帮你创建表 你只需要书写符合django orm语法的代码即可
1.在app下所在的models.py中书写类(创建表)
from django.db import models
class User(models.Model):
# 设置id字段为user表的主键 id int primary key auto_increment
# 在django中 你可以不指定主键字段 django orm会在创建当前表的时候,自动帮你新建一个名为id的主键字段
id = models.AutoField(primary_key=True)
# 设置username字段 username varchar(64) CharField必须要指定max_length参数
username=models.CharField(max_length=64) # 在django orm中 没有char字段 但是django 暴露给用户 可以自定义char字段
# 设置password = password int
password = models.IntegerField()
# phone = models.BigIntegerField(default=110) # 新增的字段 可以提前设置默认值
# addr = models.CharField(max_length=64,null=True) # 新增的字段 可以设置为空
2.上面的代码仅仅是在models.py上面添加了一个类,还没真正在数据库中创建表,
需要再执行两条命令:数据库迁移(同步)命令:
需要在CMD命令行中并且在该项目下的路径执行:
-
python manage.py makemigrations不会创建表 仅仅是生成一个记录 将你当前的操作记录到一个小本本上(migrations文件夹) python manage.py migrate将你的orm语句真正的迁移到(同步)到数据库中
五、Django操作数据库
字段的增删改查:
新增的字段:
1.直接提供默认值 default
2.设置该字段可以为空 null=True
注意:不要轻易地注释models.py中任何跟数据相关的代码
只要是跟数据库相关的代码,处理时一定要谨慎谨慎!!!
数据的增删改查:
1.get()方式:
从数据库获取对象(固定写法) models . 表名 . objects.get(条件)
select * from User where username='cxk'
obj = models.User.objects.get(username='cxk')
拿到obj后即可进行点取值
例:
print(obj.username)
print(obj.password)
注意:get取值方式在 当查询条件不存在的时候 ,会直接报错 。 如果存在会直接给你返回 数据对象本身。 所以不推荐使用
2.filter()方式 推荐使用
obj = models.User.objects.filter(username='cxk')
--当查询条件不存在的时候 不会报错而是返回一个空
--当条件存在的情况下 无论数据有几条返回的都是列表套对象的数据格式
--filter可以当多个查询条件 并且是and关系,用逗号隔开每个条件
--你可以将filter查询出来的结果当做列表去对待 ,列表里面放的是一个个对象
--支持正数的索引取值和切片但 不支持负数,所以还是不建议用切片取值
--建议使用first()取第一个元素
user_obj = obj[0]
user_obj = obj[0:3]
user_obj = obj[-1] # 报错
user_obj = res.first() 取queryset第一个元素
3.数据的增:
1.create() :
--括号内参数是以关键字参数的形式,去创建数据
--该方法由一个返回值,返回值就是当前对象本身
# 直接将用户名和密码写入数据库
# insert into User(username,password) values('cxk','123')
user_obj = models.User.objects.create(username='cxk',password='123')
2.利用对象点方法的方式:
user_obj = User(username='cxk',,password='123')
user_obj.save() # 将当前对象保存到数据库中
4.数据的增:
方式一:update()

方式二:

5.数据的删除:
delete()

Django入门必知必会操作的更多相关文章
- Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- .NET零基础入门09:SQL必知必会
一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏, ...
- django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询
from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- MySQL使用和操作总结(《MySQL必知必会》读书笔记)
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
- Elasticsearch必知必会的干货知识二:ES索引操作技巧
该系列上一篇文章<Elasticsearch必知必会的干货知识一:ES索引文档的CRUD> 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建.更改.迁移.查询配 ...
- SpringBoot快速入门(必知必会)
是什么?能做什么 SpringBoot必知必会 是什么?能做什么 SpringBoot是一个快速开发脚手架 快速创建独立的.生产级的基于Spring的应用程序 SpringBoot必知必会 快速创建应 ...
随机推荐
- Python代码编写规范,你真的会吗?
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:yangjiajia123456 最近两年的工作都是和运维相关,有时 ...
- Windows下mysql-5.7.28下载、安装、配置教程
最近需要更换mysql数据库的版本,写一篇文章,记录一下 一.下载mysql数据库 mysql的下载共有两种,一种是zip压缩文件,另一种是msi安装程序 官方5.7版本zip压缩文件下载页面 官方5 ...
- ElasticSearch 时间格式
"datetime": { "type": "date", "format": "yyyy-MM-dd HH: ...
- 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- Android 项目优化(四):内存优化
在之前的文章中我们总结过跟Android 内存相关的知识或者问题,这里先列举一下: 1. Java 内存回收机制——GC机制 2. Java 对象引用方式 —— 强引用.软引用.弱引用和虚引用 3. ...
- 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析
目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...
- threejs 限制物件只能在指定平面上拖拽
threejs提供有 DragController.js的例子来辅助拖拽 该例子可以在基于当前屏幕的x和y轴上拖拽物体,但是它不能影响z轴. 查看代码,可以在touchStart\mousedown下 ...
- FineUICore基础版部署到docker实战
FineUI用了好多年,最近出了FineUICore版本,一直没时间是试一下docker,前几天买了一个腾讯云服务器,1核2g,装了centos7.6,开始的时候主要是整个个人博客,在腾讯云安装了宝塔 ...
- Mysql悲观锁乐观锁区别与使用场景
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 【Objective-C】探索Category底层的实质
无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了category ...