Django 基础(二)

静态文件配置

STATIC_URL='/static/'   #接口前缀 和静态文件夹的没有一点关系(只是默认情况下这个前缀和静态文件夹名字一样!!)


STATICFILE_DIRS=[
    os.path.join(BASE_DIR,'static')	#就是你的静态文件路径
	os.path.join(BASE_DIR,'static1')#不同app下的static文件路径
]

	查找的时候会查找流标中所有的静态文件路径,找到的话立刻停止,都没有找到返回404

form表单提交数据的动作两种方式

<input	type='submit'>
<button></button>

form提交数据的地址如何指定及方式

action属性提交的地址
方式一:
	1.全路径
	2.只写路径后缀
	3.不写,默认往当前路径提交,form表单默认是get请求
根据客户端请求方式的不同执行不同的代码
def	login(request):			
	print(request.method)	#获取用户提交的请求方式,全是大写的字符串
	if request.method == 'GET':
		return render(request,'login.html')	#get的话返回登录页面
	return HttpResponse('ok')	#如果是post的话进行其他操作
def	login(request):			
	print(request.method)	#获取用户提交的请求方式,全是大写的字符串
	if request.method == 'GET':
		return render(request,'login.html')	#get的话返回登录页面
	print(request.POST)	#类似于大字典中存放了提交的所有数据
     # request.POST:< QueryDict: {'username': ['jason','egon'], 'password': ['123']} >
  	print(request.POST.get('username'))	#value虽然是个列表但是获取value的时候拿到是单个元素(默认取value列表里的最后一个元素)
    #egon
    print(request.POST.getlist('username'))	#想要一次性获取value列表里面所有的数据要用getlist()
    #['jason','egon']
    print(request.POST['password']) #不推荐使用该方法,因为没有就会报错
    return	HttpResponse('ok')

获取value列表里面所有的元素需要使用getlist 应用场景:多选框
get只会获取到value列表中最后一个元素

Django连接数据库

1.需要在配置文件
	DATABASES = {
        'default':{
            'ENGINE' : 'django.db.backends.mysql',
            'NAME' :'day54',
            'HOST':'127.0.0.1'
            'PORT':3306,
            'USER':'root'
            'PASSWORD':'123'
        }
	}
    PS:键必须大写
        
2.告诉django要用pymysql替换他默认mysqldb模块连接数据库
	方式一:在项目文件下面的__init__.py
    方式二:在应用文件夹下面的__init__.py
    
    #固定写法
    import pymysql
    pymysql.install_as_MYSQLdb() #告诉django用pymysql代替mysqldb连接数据库

ORM(object relational mapping)

django的orm不能够创建库,但是可以自动创建表!!!!!!!!!

提示:一个django项目尽量使用一个库,不要多个项目使用一个库

数据库迁移

python3 manage.py makemigrations 将数据库变动记录到一个小本本上(不会在数据库中生成表,但是会生成一个py文件来存放记录)
python3 manage.py migrate 将数据库变动同步在数据库中

页面跳转

	利用a标签href属性可以指定页面跳转的路径,href可以写全路径 但是推荐写后缀即可
	
注意:路径的书写一定要加斜杠!!

重定向 可以写别人的网址也可以是自己的路径
return redirect('/userlist')
return redirect('/userlist/')

Django数据库的操作

方式一:
user_obj = models.User.objects.create(name=username,password=password)
方式二:
user_obj = models.User(name=username,password=password)
user_obj.save()#调用save方法保存到数据库

models.User.objects.filter(id=1).delete()#会将queryset所有的数据对象全部删除

编辑对象的id获取方式
	方式一:<input type='hidden' name='edit_id' value={{user_obj.pk}}>
	利用hidden隐藏的功能,暗度陈仓
	方式二:<form action="/edit/?edic_id={{user_obj.pk}}" method='post'>
	以GET的形式在后缀添加数据,传输的形式还是post这并不冲突
	
注意:queryset对象修改 删除会作用于对象所有的数据对象。类似于批量操作
修改方式
	方式一:
	models.User.objects.filter(id=edit_id).update(name=username,password=password)
	方式二:
	user_obj=model.User.object.filter(id=edit_id).first()
	user_obj.name=name
	user_obj.password=password
	user_obj.save()

查询数据需要注意获取到的是queryset对象还是一个数据对象
	user_list=models.User.objects.all()#获取user表所有的数据,得到的是一个QuerySet对象,如果是该类对象可以调用query获取内部的sql语句
	print(user_list.query)
   
user_obj=model.User.object.filter(id=1).first()
	得到第一个数据对象,model.User.object.filter(id=1)得到的是id=1筛选后的queryset对象.first()就是可以得到第一条数据。
	ps:queryset也支持索引取回,但是推荐使用自带的first获取第一条
	ps2:filter当筛选条件不存在的情况下会返回一个空的queryset对象

user_Obj = models.User.objects.get(id=edit_id) #用get可以直接获取到数据对象本身但是查询条件不存在的时候直接报错
posted @ 2019-06-06 20:35  Mr-Bear  阅读(98)  评论(0编辑  收藏  举报