Django——客户端登录系统

本文深入解析Django框架的请求生命周期,静态文件配置,表单数据提交机制,客户端请求处理,数据库连接配置,以及ORM操作,包括数据的增删改查等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django请求生命周期

5cfbb50ac32ed60474.png

注意点:

# 所有的路由如果不加'/',内部会重定向加'/'的路由
# 所有html文件都是默认写在templates 文件夹下

静态文件的配置

#静态文件配置
STATIC_URL = '/static/'  # 接口前缀,和静态文件夹的名字没有关系,默认与静态文件夹的名字一直
# 静态文件配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2')
]
# 暴露给外界能够访问服务器静态文件夹下面所有的资源
# ps:会依次查找所有的静文件路径,找到合适的立刻停止,没有找到就返回404

5cfbb52d041df88073.png

5cfbb585a8cb296721.png

5cfbb5cea2ad553261.png

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

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

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

'''
action属性控制提交的地址
方式:
    1.全路径
        <form action="http://127.0.0.1:8000/login/">
    2.只写路径后缀
        <form action="/login/">
    3.不写 (默认往当前路径提交)
form表单默认是get请求
'''

客户端请求方式不一样执行不同的结果

登录功能
def login(request):
    # 获取用户端提交的请求方式
    print(request.method)  # 拿到的请求方式是全大写的字符串
    # if request.method == 'GET':
    #     return render(request,'login.html')
    # elif request.method == 'POST':
    #     return HttpResponse("收到了 老弟")
    if request.method == 'POST':
        print(request.POST)  # 你就把它当成一个大字典里面存放了客户端post提交的所有的数据
        # request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >
        print(request.POST.get('username'))  # value虽然是个列表但是获取value的时候拿到却是单个元素
        # 默认只会取value列表里面的最后一个元素
        # request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>
        print(request.POST.getlist('username'))  # 要想一次性获取value列表里面所有的数据需要用getlist()
        # ['jason', 'egon']
        print(request.POST['password'])  # 不推荐使用该方法获取数据
        return HttpResponse('OK')
    return render(request,'login.html')
    
    获取value列表里面所有的元素需要使用getlist  应用场景:用户的爱好 多选框
    get只会获取到value列表的最后一个元素

django连接数据库

1,需要修改的配置文件
#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模块连接数据库
        方式1:在你的项目文件夹下面的__init__.py
        方式2:也可以在你的应用文件夹下面的__init__.py
        
        # 固定写法
        import pymysql
        pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

数据库迁移命令:

#python3 manage.py makemigrations  将你的数据库变动记录到一个小本本上(并不会帮你创建表)
#python3 manage.py migrate         将你的数据库变动正在同步到数据库中
方式1:

5cfbb83f2fd4947067.png

方式2:

结果:

5cfbb8a1d5f7999115.png

pycharm连接数据库的方式

5cfbb8f5e4da371619.png

ps:django的orm不能够自动帮你创建库,但是可以自动帮你创建表
提示:一个django项目就使用一个库,不要多个django项目使用一个库

插入表

class User(models.Model):
    # user表的主键字段名就是id
    id = models.AutoField(primary_key=True)
    # varchar(32) name字段是varchar(32)   CharField在定义的时候必须要加max_length参数
    name = models.CharField(max_length=32)
    # varchar(16) name字段是varchar(32)   CharField在定义的时候必须要加max_length参数
    password = models.CharField(max_length=16)
    # addr = models.CharField(max_length=32,default='China')

    def __str__(self): # 执行打印命令是执行
        return self.name
    
'''
修改模型层里面的跟表相关的所有的数据,只要你修改了就必须重新执行数据库迁移命令
python manage.py makemigrations     记录到小本本上
python manage.py migrate            真正操作数据库
'''

插入数据:

# 方式1:
user_obj = models.User.objects.create(name='username',password='password ')
# 方式2:
user_obj = models.User(name=username,password=password)
user_obj.save()  # 对象调用save方法保存到数据库

查询数据:

user_list = models.User.objects.all()  # 获取user表所有的数据
# 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句
print(user_list.query) 
查询数据需要注意的是你获取到的到底是一个queryset还是一个数据对象
user_query = models.User.objects.filter(id=edit_id).first()  # 如果你是要获取数据对象first千万别忘了
# filter当条件不存在的情况下会返回一个空的queryset对象
<QuerySet []> <class 'django.db.models.query.QuerySet'>

user_obj = models.User.objects.get(id=edit_id)  # 用get可以直接获取到数据对象本身但是查询条件不存在的情况下直接报错

编辑小技巧:

编辑对象的id的获取方式
方式1:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式2:
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post">

注意:queryset对象点修改 删除 会作用于对象内部所有的数据对象  类似于批量操作
方式1:
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式2:获取到当前数据对象
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.save()

删除

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

转载于:https://www.cnblogs.com/king-home/p/10991859.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值