Django
静态文件资源
1.先编写一个登录功能
1.创建django项目并创建一个app
2.在urls.py添加一组对应关系
3.在app的views.py中编写登录核心逻辑
4.利用三板斧与前端做交互
2.我们在访问django框架资源的使用之所以可以拿到数据是因为提前在urls.py中开设了相应的资源接口,所以如果访问不到资源那么就是没有开设相应的接口
3.静态文件(html页面上使用的经常不改变的资源)
1.第三方框架
2.css文件
3.js文件
4.图片文件
针对静态文件资源一般都会放在static文件夹内
静态文件配置
针对静态文件资源的访问也需要提前开设相应的接口
'''接口前缀'''
STATIC_URL = '/static/'
#此处的/static/ 是访问网址的前缀(可以修改成任何名称)只要用户输入的前缀和这个保持一致就可以访问,和下面的配置static不是一个
固定语法:
# 静态资源配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
# 可以配置多个静态文件
]
'''配置完static之后,上面的资源路径配置就可以直接写了,不需要在/static/前面加..了'''
配置了settings文件以后,只要用户输入的前缀是/static/输入的路径是对的,那么他就有资格访问settings文件内的资源
动态解析(前后端结合使用的时候可能遇到)
'''假设一种极端情况,静态文件已经写好了 但是突然要修改它的前缀,那么在之前的配置里都要修改(假设配置了几百上千行,并且经常反复修改)'''
那么使用下面那个模板,无论怎么修改 系统都可以匹配到:
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
请求方法
get请求
'''朝浏览器索要数据,也可以额外携带2kb大小的数据'''
请求格式:url?xxx=yyy&zzz=ooo&aaa=bbb
# url?后面的数据是不参与路由匹配的 后面的数据可以随便写不影响数据本身
get携带数据的方式有两个限制:
1.不能带有敏感数据(get请求没有请求体)
2.数据大小只能在2~4kb左右
post请求
'''朝浏览器提交数据'''
可以携带额外的数据,数据没有大小限制,有请求体
form表单请求方式
form表单默认的提交方式是get
<form action="" method="">
method 默认是get 可以自己手动修改成post请求
(不用post用户密码会显示在网址上)
action 控制数据的提交地点(同一个地址可以接收多个网络请求)
方式1:不写的话 是朝当前页面所在的地址提交
方式2:写后缀/xxxx/ 自动补全ip和port
方式3:写全称 https://www.baidu.com/
'''提交post请求前期需要去配置文件中注释一行代码'''
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
request对象方法
1.request.method
获取请求方式 打印结果是纯大写的字符串(GET/POST)
2.request.POST
获取用户提交的数据(普通数据,不包含文件) 得到的结果是字典 <QueryDict: {'username': ['summer'], 'password': ['1122']}>
用request.POST.get('username') 取值的时候 只会取列表的最后一个元素
如果想取列表中所有的值 可以用 request.POST.getlist('username')
3.request.GET
获取url后面携带的非敏感数据
可以获取到无论什么请求的网址(?后面)后面的任何数据
也有两个和上面一样的方法
request.GET.get() 默认只获取列表中最后一个数据值
request.GET.getlist() 获取键对应的整个列表 无论有几个数据值
pycharm连接MySQL
1.查找pycharm提供的database按钮
在右上角侧边栏或者左下角
ps:如果两个地方都没有database的话 需要去setting里面安装一下mysql的插件 具体步骤看下图
如果一直下载不成功的话可能是网速的原因 ,多来几次就欧克!
2.首次连接数据库需要下载对应的驱动
3.简单的增删改查
ps: 如果下载完成一直连接不上的话可以选择另一个版本(驱动程序5.1版)
djiango连接MySQL(重点)
1.配置文件中修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
'NAME': 'day55', # 指定库名
'USER': 'root',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
2.指定链接MYSQL的模块
django1.11 版本需要在项目或者应用目录下的__init__.py中编写一行代码
import pymysql
pymysql.install_as_MYSQLdb()
django2.2以上版本需要使用mysqlclient模块
# 在终端下载mysqlclient模块可能会报错
ERROR: Command errored out with exit status 1:
解决方法:
1.在网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 搜索mysqlclient,下载Wheel包(选择和你的pycharm版本对应的版本)
2.将Wheel包安装到D:\Program Files (x86)
3.在cmd切换到d盘,cd Program Files (x86),输入安装命令:pip install mysqlclient-1.4.6-cp36-cp36m-win_amd64.whl
django orm
orm的存在可以让不会mysql的python程序员,使用python的语法简单快捷的操作MySQL
1.先去应用目录下的models.py编写模型类
class User(models.Model): # 类似于定义了表名
# id int primary key auto_increment
id = models.AutoField(primary_key=True) # 类似于创建了一个主键
# name varchar(32)
name = models.CharField(max_length=32) # 字段
#pwd int
pwd = models.IntegerField() # 字段
python数据库迁移/同步命令
1.将models中有关数据库的操作记录下来(migrations文件夹)
python manage.py makemigrations
2.将操作真正影响到数据库中
python manage.py migrate
'''当修改了models中与数据库相关的代码 都必须执行上述的命令'''
ps:可以简写 也可以指定应用单独迁移/同步
3.表的主键在orm中,可以不写主键 orm会自动帮你创建一个id为主键 如果不想要id作为主键 那么需要自己创建
orm语法
'''如果不想要创建的表的字段或者修改字段,只需要按照上述的迁移/同步命令执行一遍即可'''
1.查
models.User.objects.filter()
结果可以看成是一个列表套数据对象
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 查询表数据
# select * from user where name='' and password = ''
res = models.User.objects.filter(name=username,pwd=password)
print(res) # <QuerySet [<User: User object (3)>]>
return HttpResponse('收到了')
return render(request,'login.html')
'''如何获取对象'''
可以使用first()方法 如果没有值会返回NOne
2.增
models.User.objects.create()
3.改
models.User.objects.filter(id=1).update(name='summer')
4.删
models.User.objects.filter(id=1).delete()
orm外键关联
# MySQL
一对多
外键字段建在多的一方
多对多
外键字段建在第三张关系表
一对一
外键字段建在查询频率较高的表中
# ORM
一对多
外键字段建在多的一方
publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
多对多
外键字段可以直接写在某张表中 orm会自动帮你创建第三张表
authors = models.ManyToManyField(to='Authors')
一对一
外键字段建在查询频率较高的表中
detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)