HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM
HttpResponse
主要用于返回字符串类型的数据
def index(request):
return HttpResponse('index页面')
在页面中就会显示 index页面
render
主要用于返回html文件 并且支持模板语法(django自己写的)
在浏览器中输入http://127.0.0.1:8000/index/后,会返回index.html页面。
def index(request):
return render(request,'index.html')
使用render给前端传值
def index(request):
return render(request,'index.html',{'name':'春游去动物园'})
传过去是什么数据类型,在前端使用时还是什么数据类型。
<h1>index页面</h1>
<span>{{ name }}</span> #此时name的值为春游去动物园
redirect
主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀
在浏览器中输入http://127.0.0.1:8000/index/时
重定向到一个完整的网址
def index(request):
return redirect('http://www.baidu.com')
重定向到自己网站
def login(request):
return render(request,'login.html')
def index(request):
return redirect('/login/')
django框架的(static)静态文件配置
在根目录创建static文件夹,再在static中分别创建css,js,img等各种静态文件对应的文件夹,将
静态文件分门别类放入对应文件夹中。
1、在项目页面的 settings.py 文件中配置 STATIC_URL 。
STATIC_URL = '/static/'
STATIC_URL的作用是用于拼接静态文件的存储路径。
2、在配置文件中配置STATICFILES_DIRS为静态文件的存储路径。
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
这里的 static是在和项目同级的目录下创建static 文件夹,用来存储静态文件。
在static 文件夹下,可以创建 css、js、fonts、images等文件下来分类存放静态文件。
'''
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
'''
基本使用
{#导入静态文件#}
{% load static %}
{#加载应用home下static指定静态文件--图片#}
<img src={% static 'images/img001.jpg' %}>
{#加载静态文件下的CSS文件夹或指定css文件#}
<link rel="stylesheet" href="{% static 'css/as.css' %}">
request对象方法
获取当前请求方式
request.method 返回的是纯大写的请求方法字符串'POST' 'GET'
获取post请求提交的普通数据
request.POST 结果是一个QueryDict 可以看成字典处理
{'username':['春游去动物园'],'hobby':['篮球','羽毛球']}
request.POST.get('username') # 春游去动物园
request.POST.get('hobby') # 羽毛球
request.POST.getlist('hobby') # ['篮球','羽毛球']
"""
get方法会拿到值列表中最后一个元素 而不是整个列表
getlist方法会直接拿到整个值列表
"""
获取get请求提交的普通数据
request.GET 结果是一个QueryDict 可以看成字典处理{'username':['春游去动物园'],'hobby':['篮球','羽毛球']}
request.GET.get('username')
request.GET.getlist('hobby') # ['篮球','羽毛球']
POST请求报错
如果是POST请求的话,django会报错。
出现这个错误的原因主要是,跨站请求伪造。
简单来说就是,django框架为我们提供了一个中间
件,用于处理跨站请求伪造的,假如某个用户从来没有登录过我们的网站就给我们网站post数据,这
样是会被django这个中间件给阻挡,禁止请求。然后我们在开发web的时候可以给每一个登录的用户分
配一个token。这个token会被写入到用户的cookie文件里面。然后下次用户post数据的时候,
就会带上这个token。 因此如果没有token的用户就会被禁止post数据。
方法一:
在settings.py里面注释掉
'django.middleware.csrf.CsrfViewMiddleware'这一行
方法二:
在视图文件views.py里面使用@csrf_exempt
views.py 中导入模块
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def login(request):
if request.method == 'POST':
print(request.POST)
print(request.POST.get('username'))
print(request.GET)
print(request.GET.get('info'))
return render(request,'login.html')
加上那一句@csrf_exempt之后 ,就表示,当前的函数不受django跨站请求伪造的中间件的限制。
pycharm连接MySQL
"""其实pycharm也可以充当很多数据库软件的客户端"""
1.pycharm右上方侧边 database
2.pycharm左下方边角 database
3.上述两个地方都没有 需要下载插件 或者直接重装一个正常的pycharm
settings
plugins
搜索database下载即可
# 链接数据库
1.选择数据库
2.首次链接需要下载驱动
download driver...
3.测试链接如果不通过 则需要换驱动重新下载使用
Driver:MySQL MySQL for 5.1
django链接MySQL
"""
django默认自带一个sqlite3数据库 但是功能很少 仅用于本地测试
"""
1.默认配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
2.修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', # 数据库名
'HOST': '127.0.0.1', # ip地址
'PORT': 3306, # 端口号
'USER': 'root', # 用户名
'PASSWORD': '123456', # 密码
}
}
3.指定模块
在项目同名的文件夹内的__init__.py
或者应用名的文件夹内的__init__.py
添加一行固定的代码
import pymysql
pymysql.install_as_MySQLdb()
ORM对象-关系映射
ORM优势
(1)只需要面向对象编程, 不需要面向数据库编写代码.
对数据库的操作都转化成对类属性和方法的操作.
不用编写各种数据库的sql语句.
(2)实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.
不在关注用的是mysql、oracle...等.
通过简单的配置就可以轻松更换数据库, 而不需要修改代码.
ORM劣势
相比较直接使用SQL语句操作数据库,有性能损失.
根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失.
ORM和数据库关系:
在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。
通常,一个模型(model)映射到一个数据库表.
基本情况:
每个模型都是一个Python类,它是django.db.models.Model的子类。
模型的每个属性都代表一个数据库字段。
综上所述,Django为您提供了一个自动生成的数据库访问API。

执行数据库迁移命令
python3 manage.py makemigrations # 记录操作
python3 manage.py migrate # 将操作迁移到数据库
"""
首次执行迁移命令 django还会自动创建一些默认需要使用到的表
"""
字段类型
属性名 = models.字段类型,定义属性时需要指定字段类型, 通过字段类型的参数指定选项
属性名:
不允许使用python的保留关键字
不允许使用mysql的保留关键字
不允许使用连续的下划线,因为Django的查询语法就是连续的下划线
AutoField:自动增长的IntegerField, 不指定时Django会自动创建属性名为id的自动增长属性
BooleanField:布尔字段,值为True或False
NullBooleanField:支持Null、True、False三种值
CharField(max_length=20):字符串
参数max_length表示最大字符个数
TextFiled:大文本字段,一般超过4000个字符时使用
IntegerField:整数
DecimalField(max_digits=None, decimal_places=None):可以指定精度的十进制浮点数
参数max_digits表示总位数
参数decimal_places表示小数位数
FloatField():浮点数
DateField[auto_now=False, auto_now_add=False]):日期
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它
总是使用当前日期,默认为false
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当
前日期,默认为false
参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
TimeField:参数和DateField一样
DateTimeField:日期时间,参数同DateField
FileField:上传文件字段,以二进制的形式
ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
字段选项
null:如果为True,表示允许为空,默认值是False
blank:如果为True,则该字段允许为空白,默认值是False
对比:null是数据库范畴的概念,blank是表单验证范畴的
db_column:字段的名称,如果未指定,则使用属性的名称(只限于数据库表中的名字,操作数据库
还是类属性的名字)
db_index:若值为True, 则在表中会为此字段创建索引,默认值是False(为了优化查询速度 )
default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。
primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField
的选项使用
unique:如果为True, 这个字段在表中必须有唯一值,这个值不能重复,默认值是False
'''
注意:Django会自动为表创建主键字段
如果使用选项设置某属性为主键字段后,Django不会再创建自动增长的主键字段
默认创建的主键字段为id,可以使用pk代替,pk全拼为primary key
'''
创建表
class Users(models.Model):
uid = models.AutoField(primary_key=True) # 等价于uid int primary key auto_increment
name = models.CharField(max_length=32) # 等价于name varchar(32)
pwd = models.IntegerField() # 等价于pwd int
ORM基本使用
增
models.表名.objects.create(field1='XXX', field2='XXX', ...)
res=models.UserInfo.objects.create(user='root',password='pwd',age=18)
print(res)
print(res.user)
print(res.password)
print(res.age)
删
models.表名.objects.filter(筛选条件).delete()
models.UserGroup.objects.filter(id=2).delete()
改
models.表名.objects.filter(筛选条件).update(修改内容)
models.UserGroup.objects.filter(id=2).update(title='公关部')
查
models.表名.objects.filter(筛选条件)
res = models.Users.objects.filter(name='春游去动物园')
print(res) # <QuerySet [<Users: Users object>]>
print(res[0]) # Users object
print(res[0].uid) # 1
print(res[0].name) # 春游去动物园
print(res[0].pwd) # 111
修改数据库表的默认的名称
数据库表的默认名称为 :
应用名_模型名
例:Book应用中定义BookInfo模型类
Book_bookinfo
在模型类中定义元类Meta,用于设置元信息,使用db_table自定义表的名字
# 书籍信息模型
class BookInfo(models.Model):
name = models.CharField(max_length=20) #图书名称
class Meta: #元信息类
db_table = 'bookinfo' #自定义表的名字
HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM的更多相关文章
- Django静态文件配置 request对象 Django操作MySQL
Django中的文件介绍 render.HttpResponse和redirect 当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的vi ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
- django三板斧与request对象方法与ORM
目录 django三板斧 HttpResponse() render() redirect() 网页获取静态文件样式 request对象方法 post请求问题 针对get请求和post请求执行不同代码 ...
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- django之三剑客、静态文件配置、请求响应对象、数据库操作
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
- day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间
day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...
- day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置
目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...
随机推荐
- 在并发情况下,Elasticsearch 如果保证读写一致?
1.可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用 层来处理具体的冲突: 2.另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只 有当大多数 ...
- Spark学习摘记 —— RDD行动操作API归纳
本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...
- java如何读取和遍历properties文件
在java项目开发过程中,使用properties文件作为配置基本上是必不可少的,很多如系统配置信息,文件上传配置信息等等都是以这种方式进行保存.同时学会操作properties文件也是java基础. ...
- SpringBoot-总结
SpringBoot一站式开发 官网:https://spring.io/projects/spring-boot Spring Boot可以轻松创建独立的.基于Spring的生产级应用程序,它可以让 ...
- centos7源码安装mysql5.7.19
centos7源码包安装mysql5.7 5.7.20安装方法和5.7.19的一样. 1.安装前准备 清空环境.安装相应的软件包 1>关闭防火墙和SELinux 2>配置yum源(阿里云, ...
- Mybatis-Plus查询整理
1.Hibernate是全ORM(对象关系映射)框架,利用完整的javabean对象与数据库映射结构来自动生成sql. 2.Mybatis是半ORM框,仅有字段映射,需要手写sql语句和对象字段结合生 ...
- LAN交换机自学习算法
LAN交换机自学习算法 提示 第二层交完全忽略帧的数据部分协议,仅根据第二层以太网的MAC地址做出转发决策. MAC地址表有时又被称作内容可编址内存(CAM)表 检查源MAC地址 如果源MAC地址不存 ...
- 【2021 ICPC Asia Jinan 区域赛】 C Optimal Strategy推公式-组合数-逆元快速幂
题目链接 题目详情 (pintia.cn) 题目 题意 有n个物品在他们面前,编号从1自n.两人轮流移走物品.在移动中,玩家选择未被拿走的物品并将其拿走.当所有物品被拿走时,游戏就结束了.任何一个玩家 ...
- 2021-01-25 cf #697 Div3 C题(超时,换思路减少复杂度)
题目链接:https://codeforces.com/contest/1475/problem/C 题意要求:需组成的2对,男的序号不能重,女的序号不能重 比如这例 输入: 行1--测试个数 行1` ...
- gin框架使用【7.中间件使用】
在 gin中,通过默认的函数,构建一个实现了带默认中间件的 *Engine. r := gin.Default() 默认绑定了Logger和Recovery中间件,帮助我们进行日志输出和错误处理. f ...