欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django第二篇

程序员文章站 2024-03-24 22:27:28
...

django第二篇

1.静态文件配置

接口前缀:

​ STATIC_URL = '/static/'

跟静态文件夹的名字没有关系,默认情况下这个前缀跟静态文件夹名字一样

文件配置

STATICFILES_DIRS = [

​ os.path.join(BASE_DIR,'static')

]

'static':就是你的静态文件夹路径,可以设置多个,会依次查找列表中所有的静态文件路劲,找到就停止,都没有的话返回404(资源不存在)

2.form表单操作

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

<input type='submit'>

<button></button>

form表单提交数据地址的指定及方式:

​ action属性控制提交的地址

方式一:全路径

<form action='http://127.0.0.1:8000/login/'>

方式二:只写路劲后缀

<form action='/login/'>

方式三:不写(默认往当前路劲提交)

注意:利用a标签href属性可以指定页面跳转的路劲,href可以写全路劲,但是推荐写后缀即可

<a href='/login/' class='btn btn-success'>登入</a>

两种请求方式(form表单默认是get请求)

#根据客户端请求方式的不同执行不同的逻辑代码
def login(request):
    #获取客户端的请求方式
    print(request.method) #注意是全大写的字符串
    if request.method == 'POST':
        return HttpResponse('ok')
    return render(request,'login.html')

获取请求方式中携带的参数

def login(request):
    if request.method == 'POST':
        print(request.POST)  #里面存放了客户端post提交的所有数据,可以看成是一个大字典,{'username':['lucas'],'password':['123']}
        print(request.POST.get('username')) #value虽然是一个列表,但是获取值得时候拿到的是单个元素,默认只会取列表里的最后一个元素
        print(requet.POST.getlist('username'))  #一次性获取value列表里的所有数据,应用场景可以是用户的爱好,多选框   

#get请求的取值方式和post一样

3.django连接数据库

修改配置文件

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'day54', #库名
        'HOST':'127.0.0.1',
        'POST':3306,
        'USER':'root',
        'PASSWORD':'123'
    }
}
#注意:键必须是大写

替换

​ 告诉Django用pymysql替换它,默认mysqldb模块连接数据库

​ 方式一:在项目文件夹下面的__init__.py

​ 方拾二:在应用文件夹下的__init__.py

#固定写法
import pymysql
pymysql.install_as_Mysql()

4.orm简单操作

orm简介

​ orm:对象关系映射,简单来说就是类对应数据库中的一张表,类对象对应表记录,对象的属性对应某条记录的值

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

​ 小提示:一个django项目就使用一个库,不要多个django项目使用一个库

数据库迁移(同步)命令

​ 在models创建好类之后,还需要两个命令:

Django第二篇

​ python3(当前所用解释器名称) manage.py makemigrations:将数据库变动记录到文件中

​ python3 manage.py migrate:将数据库变动同步到数据库中

5.操作数据库

User表插入数据

方式一:

user_obj = models.User.objects.create(name=username,password=password)
#create方法有一个返回值,就是当前新增的数据对象本身

方式二:

user_obj = models.User(name=password,password=password)
user_obj.save()

查询数据

获取User表所有的数据
user_list = models.User.objects.all() #获取user表所有的数据

Django第二篇

上图中的user_list是QuerySet对象,可以通过点query查看获取sql语句,QuerySet对象支持索引取值,但是不推荐,推荐使用自带的.first()来获取第一条数据

获取单个值
user_query = models.User.objects.filter(id=1)  # queryset对象
user_obj = user_query.first()  # 数据对象
# 当条件不存在的情况下会返回一个空的queryset对象,推荐使用
user_obj = models.User.objects.get(id=1)  # 用get可以直接获取到数据对象本身,但是查询条件不存在的情况下直接报错,所有推荐使用filter

删除数据

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

修改数据

方式一:

models.User.objects.filter(id=edit_id).update(name=username,password=password)
#调用queryset封装的方法,该方法是一个批量操作,会将queryset内所有的数据对象全部修改

方式二:

user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.password = password
user_obj.save()
上述edit_id获取方式:

方式一:利用input隐藏一个标签

<input type='hidden' name='edit_id' values='{{user_obj.pk}}'>  #django中pk默认取的是主键字段,User表中id就是主键字段

方式二:GET请求携带

<form action='/edit/?edit_id={{user_obj.pk}}' method='post'>
    
</form>

上述修改、删除都是通过queryset对象点的方法完成的,会作用于内部所有的数据对象,类似于批量操作

注意:修改模型层里面的根表相关的所有的数据之后,必须重新执行数据库迁移命令

6.django请求生命周期

Django第二篇