Django框架基础

静态文件配置

1、默认情况下所有的html文件多是存放在templates文件夹内的

2、什么是静态文件

​ 网站上用到的提前写好的css js等第三方的前端模块 图片 都叫做静态资源

3、默认情况下,网站所用到的静态文件资源全部会放在static文件夹下

​ 通常情况下,在static文件夹内部还会再建其他文件夹

​ css文件夹

​ js文件夹

​ font文件夹

​ img文件夹

​ bootstrap文件夹

​ fontawesome 文件夹

​ django中,需要你自己手动创建静态文件存放的文件夹

​ static_url = '/static/' # 访问静态文件资源的前缀,通常情况下接口名字的前缀也叫static

手动开设静态文件访问资源:

STATICFILES_DIRS = [  # 静态资源所在的文件夹路径
		os.path.join(BASE_DIR,'static'),  # 将static文件里面所有的资源暴露给用户
		os.path.join(BASE_DIR,'static1'),  # 将static文件里面所有的资源暴露给用户
		# os.path.join(BASE_DIR,'static2'),  # 将static文件里面所有的资源暴露给用户
	]

4、静态文件动态绑定

	{% load static %}
	<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
	<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

form 表单回顾

form表单默认是get请求

get请求也能携带参数,格式为url?xxx=xxx&yyy=yyy

​ 如:http://127.0.0.1:8000/login/?username=jason&password=jason123

特点:

​ 1、携带的数据不安全

​ 2、可携带的数据大小有限,

​ 3、通常只会携带一些不是很重要的数据

action:

​ 1、不写,默认朝当前地址提交

​ 2、可以只写后缀/index

​ 3、可以写全路径 https://www.baidu.com

我们在朝后端提交post请求时出现代码为403的错误

目前阶段,只需要去配置文件中注释掉一行内容

	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后端的视图函数,默认处理的是get请求,无论是发get请求还是post请求,都会执行视图函数:

	def login(request):
		print('收到请求~')
		return render(request,'login.html')
	
	get请求只想拿到login页面
	post请求想提交数据  然后后端做校验 

判断请求方式的方法:request.method

request方法
	request.method  获取请求方式  得到'GET'或'POST'
	
	request.POST    获取用户提交的post请求数据
	如何获取用户数据(******)
		request.POST.get()  # 默认只会获取列表最后一个元素
		request.POST.getlist()  # 如果你想获取列表 用getlist()
		
	request.GET     获取用户提交的get请求数据
	如何获取用户数据(******)
		request.GET.get()  # 默认只会获取列表最后一个元素
		request.GET.getlist()  # 如果你想获取列表 用getlist()
def login(request):
	# if request.method == 'GET':
	#     print('来啦 老弟~')
	#     print(request.method,type(request.method))  # 获取前端请求方式
	#     return render(request,'login.html')
	# elif request.method == 'POST':
	#     print('post业务逻辑')
	#     return HttpResponse('收到了')
	if request.method == "POST":
		return HttpResponse('收到了')
	return render(request,'login.html')

pycharm连接数据库

django连接Mysql数据库,两步操作

1、配置文件配置

		DATABASES = {
				'default': {
					'ENGINE': 'django.db.backends.mysql',  # 指定数据库类型
					'NAME': 'day49',  # 指定库的名字,新开一个项目最好新开一个库
					'USER':'root',  # 注意 键必须是全大写
					'PASSWORD':'123qwe',
					'HOST':'127.0.0.1',
					'PORT':3306,
					'CHARSET':'utf8'
				}
			}

2、修改连接

主动告诉django 不要用默认的mysqldb连接 而是用pymysql
		你可以在项目名下的__init__.py中书写
		也可以在应用名下的__init__.py中书写
		import pymysql
		pymysql.install_as_MySQLdb()

django orm简介

orm 对象关系映射

类 ——> 表

对象 ——> 数据

对象.属性 ——> 字段对应的值

为什么使用orm:能够让不会数据库操作的人也能够简单方便去操作数据库

orm的缺点:封装程度太高 有时候会出现查询效率偏低的问题

所以工作中 简单的用orm,复杂的 追求速度的 需要你手动书写sql语句

django中如何操作orm

​ 书写模型类
​ 去应用下的models.py中书写模型类(就是类)

以后在写django项目时,一个项目就对应一个数据库,不要多个项目共用数据库

数据库迁移(同步)命令(特别注意)

1.python3 manage.py makemigrations # 将数据库的修改 记录到小本本上(migrations文件内)

2.python3 manage.py migrate # 将修改操作真正的同步到数据库中

上面两条命令必须是成双成对出现
只要修改了models里面跟数据库相关的代码 你就必须重新执行上面两条命令

模型表字段的增删改查

字段的修改

直接修改代码,然后执行数据库迁移命令(两条命令都要执行,不能少)

	# 方式1  设置默认值
	字段名 = models.EmailField(default='123@qq.com')  # varchar
	# 方式2   允许字段为空
	字段名 = models.BigIntegerField(null=True)
	# 直接在提示中给默认值
	字段名 = models.CharField(max_length=32)

字段的删除:直接注释掉对应的代码段,然后再执行数据库迁移命令

谨慎使用,因为字段名删除后,对应的所有数据都将删除,不可恢复

模型表数据的增删改查

	data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>
	"""
	filter返回的结果是一个"列表",里面才是真正数据对象
	filer括号内可以放多个关键字参数 这多个关键字参数在查询的时候 是and关系
	"""
	user_list = models.User.objects.all()  # models.User.objects.filter()
	"""
	结果是一个"列表" 里面是一个个的数据对象
	"""

	user_obj = models.User.objects.create(username=username,password=password)
    print(user_obj,user_obj.username,user_obj.password)
	# create方法会有一个返回值  返回值就是当前被创建的对象本身

	models.User.objects.filter(id=edit_id).update(username=username,password=password)
    """
    批量操作  会将filter查询出来的列表中所有的对象全部更新
    """

	models.User.objects.filter(id=delete_id).delete()
	"""
		批量操作  会将filter查询出来的列表中所有的对象全部删除
	"""
posted @ 2019-11-23 16:34  AllenCH  阅读(120)  评论(0)    收藏  举报