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文件夹内

image

静态文件配置

针对静态文件资源的访问也需要提前开设相应的接口
'''接口前缀'''
STATIC_URL = '/static/'  
#此处的/static/ 是访问网址的前缀(可以修改成任何名称)只要用户输入的前缀和这个保持一致就可以访问,和下面的配置static不是一个 
固定语法:
# 静态资源配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
	# 可以配置多个静态文件
]
'''配置完static之后,上面的资源路径配置就可以直接写了,不需要在/static/前面加..了'''

配置了settings文件以后,只要用户输入的前缀是/static/输入的路径是对的,那么他就有资格访问settings文件内的资源

image

动态解析(前后端结合使用的时候可能遇到)
'''假设一种极端情况,静态文件已经写好了 但是突然要修改它的前缀,那么在之前的配置里都要修改(假设配置了几百上千行,并且经常反复修改)'''
那么使用下面那个模板,无论怎么修改 系统都可以匹配到:
   {% 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',
]

image

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版)

image
image

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
     

image
image
image

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()   # 字段

image

python数据库迁移/同步命令
1.将models中有关数据库的操作记录下来(migrations文件夹)
     python manage.py makemigrations
2.将操作真正影响到数据库中
     python manage.py migrate
'''当修改了models中与数据库相关的代码 都必须执行上述的命令'''
ps:可以简写 也可以指定应用单独迁移/同步

3.表的主键在orm中,可以不写主键 orm会自动帮你创建一个id为主键  如果不想要id作为主键 那么需要自己创建

image
image

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)
posted @ 2022-09-01 11:27  Hsummer  阅读(180)  评论(0编辑  收藏  举报