django mysql decimal,Django之连接Mysql

本文详细介绍了Django中如何处理HTTP请求,包括GET和POST方法的使用,以及如何处理表单数据。同时讲解了Django的ORM操作数据库,如模型定义、数据插入与更新、查询等。此外,还提到了前端资源的组织和URL路由规则,以及静态文件和模板的配置。

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

1.不带斜杠的路由访问将自动重定向内部带有斜杠的路由

3147d0c654161f117acab72487891249.png

默认情况下,所有html文件都写入模板文件夹中

默认情况下,所有静态文件(css,js,前端第三方库)都放置在静态文件夹中

HTML页面外部资源介绍

光盘

本地

d4531f059eb860ec6af6dcb5a39e3ac6.png

1635151-20190609071926766-1208098080.png

1635151-20190609072659497497-979954800.png

暴露给外界,能够访问服务器静态文件夹下的所有资源

STATIC_URL = " /xxx/ " # 接口前缀与您的静态文件夹名称相关否 # 默认情况下,此前缀与静态文件夹名称相同! ! ! # 静态文件配置

STATICFILES_DIRS = [

os.path.join(BASE_DIR, " 静态 "),# 是您的静态文件夹Path 跨度>

os.path.join(BASE_DIR," static1 " ),

os.path.join(BASE_DIR, " static2 " )

]

# ps:将逐一搜索列表中的所有静态文件路径并停止如果发现,立即。找不到返回404

\ lt;输入类型= " 提交 " \ gt;

\ lt;按钮\ lt;/按钮

操作属性控制提交的地址

方式: 1 。完整路径 \ lt; form action = " http://127.0.0.1:8000/login/ " \ gt;

2 。只写路径后缀

\ lt; form action = " /登录/ " \ gt;

3 。不写(默认情况下,提交到当前路径)

表单表单默认是一个获取请求

根据不同的客户端请求方法执行不同的逻辑代码 def 登录(请求): # 获取用户提交的请求方法

打印(request.method)# 获取请求的方法是使用全大写字母的字符串

if request.method == " GET " :

返回渲染(请求," login.html " )

elif request.method == " POST " :

return HttpResponse(" 我收到了我的兄弟 " )

个人建议以以下方式编写,以减少代码冗余和结构混乱

def 登录(请求):

如果 request.method == " POST " :

return HttpResponse(" 确定 " )

返回渲染(请求," login.html ")

def 登录(请求): # 获取用户提交的请求方法

打印(request.method)# 获取请求的方法是使用全大写字母的字符串

# 如果request.method ==" GET":

# 返回渲染(请求," login.html")

# elif request.method ==" POST":

# return HttpResponse("我收到了我的兄弟")

if request.method == " POST " :

打印(request.POST)# 您只是将其用作大型词典来存储客户端帖子提交的所有数据

# request.POST:\\u0026lt; QueryDict:{"用户名":[" jason"],"密码":[" 123"]} \ gt;

打印(request.POST.get(" 用户名 ")))# 尽管该值是一个列表,但在获取该值时它是一个元素

# 默认情况下,仅会提取值列表中的最后一个元素

# request.POST:\\u0026lt;QueryDict:{"用户名":[" jason"," egon "]," password":[" 123"]} \ gt;

打印(request.POST.getlist(" 用户名 ")))# 要一次获取值列表中的所有数据,请使用getlist()

# [" jason"," egon"]

打印(request.POST [" 密码 "]))# 建议不要使用此方法来获取数据

return HttpResponse(" OK " )

返回渲染(请求," login.html " )

要获取值列表中的所有元素,您需要使用getlist应用程序场景:用户的爱好。

get将仅获取值列表的最后一个元素

打印(request.GET)# \ lt; QueryDict:{"用户名":[" jason"],"密码":[" 123"]} \ gt;

request.GET.get(" 用户 " )

# \ lt; QueryDict:{"用户名":[" jason"," egon"],"密码":[" 123"]} \ gt;

request.GET.getlist(" 用户名 ")

数据库= {

" 默认 " :{

" 引擎 ":" django.db.backends.mysql " ,

" 名称 ":" day54 " ,

" 主机 ":" 127.0.0.1 " ,

" 端口 ":3306 ,

" USER ":" 根 " ,

" 密码 ":" 123 "

}

}

ps:键必须全部大写

方法1:项目文件夹下的__init__.py

方法2:它也可以位于应用程序文件夹下的__init__.py中 # 固定写作

导入 pymysql

pymysql.install_as_MySQLdb() # 告诉Django使用pymysql而不是mysqldb连接到数据库

对象关系映射

分类》》桌子

对象》》》表记录

对象属性》》》》对应于字段

的值的记录

django的orm不能自动为您创建库,但是可以自动为您创建表

提示:将一个库用于一个django项目,请勿将一个库用于多个django项目

属性=模型。字段类型(选项)

django将为表创建一个自动增长的主键列。每个模型只能有一个主键列。如果使用该选项将属性设置为主键列,则django将不会创建自动增长的主键列。

默认创建的主键列的属性是id,可以改用pk,而pk拼写为主键。

首次导入导入 django.db.models

AutoField:自动增长的IntegerField,通常不需要指定,当未指定时,Django会自动创建一个名为id的自动增长属性。

BooleanField:布尔字段,值为True或False。

NullBooleanField:支持Null,True,False三个值。

CharField(max_length = 字符长度):字符串。 TextField:大文本字段,通常在超过4000个字符时使用。

参数max_length表示最大字符数。

IntegerField:整数。

DecimalField(max_digits = None,十进制_places = None):十进制浮点数。 FloatField:浮点数。

参数max_digits代表总位数。

参数decimal_places代表小数位数。

DateField [auto_now = False,auto_now_add = False]):日期。 TimeField:时间,参数与DateField相同。

参数auto_now表示每次保存对象时,此字段都会自动设置为当前时间,该时间用于 " 最后修改 " 时间戳,它始终使用当前日期,默认为false。

参数auto_now_add表示第一次创建对象时会自动设置当前时间。它用于创建时间戳。它始终使用当前日期,默认值为false。

参数auto_now_add和auto_now是互斥的,并且会组合出现错误。

DateTimeField:日期和时间,参数与DateField相同。

FileField:上传文件字段。

ImageField:从FileField继承,以验证上载的内容以确保它是有效的图片。

1 一对多关系

Models.ForignKey()外键约束

在多个类别中定义 2 多对多关系

Models.ManyToManyField()

定义任何一个都可以 3 一对一关系

Models.OntoOneField()

可以在任何类

中定义

通过选项限制字段,选项如下:

null:如果为True,则表示允许为空,默认值为False。

空白:如果为True,则此字段允许为空白,默认值为False。

对比:null是数据库类别的概念,空白是表单验证证书的类别。

db_column:字段的名称,如果未指定,则使用属性的名称。

db_index:如果该值为True,则将为此表中的该字段创建一个索引,默认值为False。

default:默认值。

primary_key:如果为True,则此字段将成为模型的主键字段。默认值为False,通常用作AutoField的选项。

unique:如果为True,则此字段在表中必须具有唯一值,默认值为False。

python3 manage.py makemigrations将您的数据库更改记录在一本小书中(并不能帮助您创建表)

python3 manage.py migration会将您的数据库更改同步到数据库

# 在操作数据库的用户表中插入数据 # 方法1:

user_obj = models.User.objects.create(名称=用户名,密码= 密码)

# 方法2:

user_obj = models.User(名称=用户名,密码= 密码)

user_obj.save() # 对象调用save方法保存到数据库

user_list = models.User.objects.all()# 获取用户的所有数据表 # 只要是QuerySet,您可以单击查询以查看当前QuerySet对象的内部SQL语句

打印 (user_list.query)

使用a标签的href属性,您可以指定页面跳转的路径。 Href可以写完整路径,但是建议写后缀。

\ lt; a href = https://www.cnblogs.com/zhengyuli/p/" /reg/ " 类 = " btn btn-成功 " \ gt;添加数据/a>

# 注意路径必须用斜杠书写

重定向您可以写别人的URL或您自己的路径

返回重定向(" /用户列表 " )

返回重定向(" /用户列表/ " )

queryset对象支持索引值,但是不建议您这样做。建议使用内置的.first()帮助您获取第一个数据

models.User.objects.filter(id = 1).delete()# 将全部删除queryset的数据对象

查询数据需要注意您获取的是查询集还是数据对象

user_query = models.User.objects.filter(id = edit_id).first()# 不要忘记是否要首先获取数据对象 # 当条件不存在时,过滤器将返回一个空的queryset对象

\ lt; QuerySet [] \\> \ lt; 类 " django.db.models.query.QuerySet " \ gt;

user_obj = models.User.objects.get(id = edit_id)# 使用直接获取获取数据对象本身但查询条件不存在时直接获取错误

方法1:使用输入隐藏标签 \ lt;输入类型= " 隐藏 "名称= " edit_id " value = " {{user_obj.pk}} " \ gt; 方式2: \ lt; form action = " /编辑/?edit_id = {{user_obj.pk}} " method = " post " \ gt;

注意:修改和删除queryset对象将影响对象内部的所有数据对象,类似于批处理操作

方法1:

models.User.objects.filter(id = edit_id).update(名称=用户名,密码= 密码)

方法2:获取当前数据对象

user_obj = models.User.objects.filter(id = edit_id).first()

user_obj.name = 用户名

user_obj.save()

修改与模型层中的表相关的所有数据,只要对其进行修改,就必须重新执行数据库迁移命令

外键字段名orm将在字段名后自动添加_id。无论您的字段名称是否具有_id

340e28af8221209cf47c7e803b8aa12b.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值