Django静态文件,链接数据库,DRM操作

发布时间 2023-04-23 15:33:57作者: 无敌大帅逼

配置文件的介绍

SECRET_KEY = '0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'  # 盐
DEBUG = True # 调试模式, 等项目上线的时候,改成False

# 配置数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 改语言的
LANGUAGE_CODE = 'zh-hans'

# 改时区
TIME_ZONE = 'Asia/Shanghai'

静态文件的配置

# 以登录功能为例讲解

"""
	我们在Django中一般把html文件放到tempates文件夹下面
	把静态文件放到static文件夹下面
"""

# 静态文件
"""
	就是我们常见的:
		CSS文件
		JS文件
		img
		我们的第三方前端框架:bootstrap相关的
		...
"""

# Django不会帮我们创建static文件夹,需要我们自己手动创建出来
# 名字可以不叫static,但是大家都叫static,你就不要改了,就用这个

'''在static文件夹下面还可以按照功能的不同,进行目录的划分
	css
	js
	img
	...
'''

# 在浏览器中输入网址,如果找不到,说明对应的服务端没有开设对外访问的接口
# 如果我们在后端开放这样一个接口,那是不是就可以访问了

# 静态文件配置
STATIC_URL = '/xxxx/'

# 以后凡是找静态文件,都从下面的列表中得路径去找
# STATICFILES_DIRS = [
#     '/static/css/my.css'
# ]
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

# 动态解析
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

request对象

request.method	获取请求方式 结果是纯大写的字符串数据
	GET\POST
request.POST	获取post请求请求体里面携带的数据
	request.POST.get()		获取列表最后一个数据值
 	request.POST.getlist()	 获取整个列表数据
request.GET		获取网址问号后面携带的数据
	request.GET.get()		获取列表最后一个数据值
 	request.GET.getlist()	 获取整个列表数据
 
"""
在视图函数中针对不同的请求代码编写套路
	if request.method == 'POST':
		return HttpResponse()
	return HttpResponse()
"""

form表单

action		控制数据提交的地址
	1.action=""  数据默认提交给当前页面所在的地址
	2.action="https://www.baidu.com/"  完整地址
 	3.action="/index/"  朝当前服务端的index地址提交

method		控制数据提交的方法
	默认是get
	可以改post
    
请求方法补充
	get
    	朝服务端索要数据 也可以携带一些额外的要求
     		携带额外数据的方式:  URL?xxx=yyy&uuu=zzz
      		问号后面携带数据的大小是有限制(2KB)的并且不能携带敏感数据
	post
    	朝服务端提交数据
        	携带额外数据的方式:  请求体
       		请求体携带数据安全性较高并且没有大小限制
        
前期发送post请求需要注释掉配置文件中的某一行
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Django链接数据库(MySQL)(掌握)

django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 链接MySQL数据库
   'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db13',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123',
        'CAHRSET': 'utf8',
    }
# 以上配置改完之后,框架启动不起来了
'''
	djang框架底层链接MySQL用的模块是MySQLdb模块,这个模块的兼容性很差,所以,我们不用
	我们认为的把MySQLdb模块改为pymysql模块
'''

# 如何修改pymysql模块呢?
在Django框架的任意__init__.py文件中加入一下两句话:
*************************************************************************
        import pymysql
        ####################################这句话的意思其实就是猴子补丁
        pymysql.install_as_MySQLdb()
*************************************************************************
# 要先安装pymysql模块

'''
2.需要指定模块
	django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
    	import pymysql
    	pymysql.install_as_MySQLdb()
	django2.X及以上都可以直接通过下载mysqlclient模块解决
    	pip3.8 install mysqlclient
	ps:该模块windows下载问题不大 主要是mac电脑可能有问题
'''

Django的ORM操作

ORM: 对象关系映射
作用:我们以后再操作数据库的时候,就不用在写原生sql语句,用面向对象的代码去写,然后他给你翻译成原生sql语句。

# 缺点:封装程度太高,ORM的sql执行效率没有原生sql执行的效率高,这个效率的影响暂时忽略

# 关系映射:
表					>>>:      类名

记录					>>>:	 对象

字段					>>>:      属性

'''我们的ORM相关代码写在哪里呢?在models.py文件中写'''

# 创建一张表出来
# 代码写完之后,需要执行两个命令才能把表创建出来

# *******************************************************************************
        python36 manage.py makemigrations  # 相当于把迁移过程发生的事情给你记下来了
        python36 manage.py migrate         # 这句话才真正的把表创建出来
 '''上面两句话缺一不可,都要执行!!!'''
'''只要修改了跟数据库相关的代码,都要执行上面两句话'''
# *******************************************************************************

class Author(models.Model):
    ''''
        由于每张表都应该有一个主键字段,并且主键字段名都叫id,如果满足这两个条件,那么,可以省略不写,自动帮你常见主键字段出来
    '''
    # username varchar(32)
    username = models.CharField(max_length=32)

    # password varchar(32)
    password = models.CharField(max_length=32)

ORM基本语句

from app01 import models
models.类名.objects.create() #增加
models.类名.objects.filter() #查找
models.类名.objects.update() #修改
models.类名.objects.delete() #删除

数据的增查

# 查
 res=models.UserInfo.objects.filter(username=username, password=password).first()
    '''filter(username=username, password=password)里面的条件是and关系'''

    if res:
        # print('登录成功')
	#增
   models.UserInfo.objects.create(username='tank',password='123')
	 else:
        print('用户名或者密码错误')

模板变量的分配

def ab_render(request):
    # 第一种方式分配变量到模板中
    user_dict = {'username': 'kevin', 'password': 123}
    user_dict1 = {'a':1}

    # 第二种方式
    print(locals()) # 会把该函数局部里面的所有变量都分配到模板文件中
    # return render(request, 'ab_render.html', {'user_dict':user_dict, 'user_dict1':user_dict1})
    return render(request, 'ab_render.html', locals())