
在线QQ客服:1922638
专业的SQL Server、MySQL数据库同步软件
1.不带斜杠的路由访问将自动重定向内部带有斜杠的路由

默认情况下,所有html文件都写入模板文件夹中
默认情况下,所有静态文件(css,js,前端第三方库)都放置在静态文件夹中
HTML页面外部资源介绍
光盘
本地



暴露给外界,能够访问服务器静态文件夹下的所有资源
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

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

被折叠的 条评论
为什么被折叠?



