首页 > 其他分享 >Django(三)

Django(三)

时间:2023-04-23 20:46:11浏览次数:32  
标签:username models request Django user password id

Django(三)

ORM的增删改查

模板变量的分配

"""第一种方式"""
def ab_render(request):  # 模板语法,写在views中
    user_dict = {'username': 'lisi', 'password': 123}
    return render(request, 'ab_render.html', {'user_dict': user_dict})  # Django中html就是模板文件
"""
	在html中用{{ user_dict }}这么使用
	作用为在html中可以使用这个字典
"""
"""第二种方式"""
	print(locals())  # 会把该函数中所有局部变量都分配到模板文件中
    return render(request, 'ab_render.html', locals())

用户数据的修改

# 1. 点击修改按钮,应该跳转一个修改页面
# 2. 页面中应该展示出你修改的这条记录的原来的值
# 3. 点击修改按钮,应该把当前记录的id值传到后端去
# 4. 后端应该接收这个id值,然后拿着这个id值当成查询条件去数据库中查询,得到这条记录的对象
# 5. 把查询出来的数据对象,分配到模板文件中,展示出来

注册登陆删除等操作实例

"""注册页面"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/js/jquery-3.6.4.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<h1 class="text-center">注册页面</h1>
<div class="container">
    <div class="row">
        <form action="" method="post">
            <div class="form-group">
                用户名: <input type="text" name="username" class="form-control">
            </div>
            <div class="form-group">
                密码: <input type="password" name="password" class="form-control">
            </div>
            <div class="form-group text-center">
                <input type="submit" value="注册" class="btn btn-primary">
            </div>
        </form>
    </div>
</div>
</body>
</html>
"""注册方法"""
def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')  # 接收网页提交来的用户名
        password = request.POST.get('password')  # 接收网页提交来的密码
        # res = models.Info.objects.create(username=username, password=password)  # 返回的是当前插入的对象,第一种注册方式
        res = models.Info(username=username,password=password)
        res.save()  # 第二种注册方式
        return redirect('/user_list/')
    return render(request, 'register.html')

"""打印出所有用户的列表"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/js/jquery-3.6.4.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">用户列表</h1>
        <div class="col-md-10 col-lg-offset-1">
            <table class="table table-striped table-hover">
                <thead>
                <tr>
                    <td class="text-center">id</td>
                    <td class="text-center">username</td>
                    <td class="text-center">password</td>
                    <td class="text-center">操作</td>
                </tr>
                </thead>
                <tbody>
                {% for foo in user_date %}
                    <tr>
                        <td class="text-center">{{ foo.id }}</td>
                        <td class="text-center">{{ foo.username }}</td>
                        <td class="text-center">{{ foo.password }}</td>
                        <td class="text-center">
                            <a href="/edit/?edit_id={{ foo.id }}" class="btn btn-success btn-xs">修改</a>
                            <a href="/del_user/?del_id={{ foo.id }}" class="btn btn-danger btn-xs">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

"""用户列表方法"""
def user_list(request):
    user_date = models.Info.objects.all().filter(is_delete=False)  # 查询所有
    return render(request, 'user_list.html', locals())

"""修改页面"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/js/jquery-3.6.4.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<h1 class="text-center">修改页面</h1>
<div class="container">
    <div class="row">
        <form action="" method="post">
            <div class="form-group">
                用户名: <input type="text" name="username" class="form-control" value="{{ edit_date.username }}">
            </div>
            <div class="form-group">
                密码: <input type="password" name="password" class="form-control" value="{{ edit_date.password }}">
            </div>
            <div class="form-group text-center">
                <input type="submit" value="修改" class="btn btn-primary">
            </div>
        </form>
    </div>
</div>
</body>
</html>
"""修改方法"""
def edit(request):
    edit_id = request.GET.get('edit_id')
    edit_date = models.Info.objects.filter(pk=edit_id).first()  # 查询的是主键就可以写pk不写具体的字段名

    if request.method == 'POST':
        username = request.POST.get('username')  # 接收网页提交来的用户名
        password = request.POST.get('password')  # 接收网页提交来的密码

        models.Info.objects.filter(pk=edit_id).update(username=username, password=password)  # 第一种修改方式
        # edit_date.username = username
        # edit_date.password = password
        # edit_date.save()  # 第二种修改方式
        return redirect('/user_list/')
    return render(request, 'edit.html', locals())

"""删除方法"""
def del_user(request):
    del_id = request.GET.get('del_id')
    # models.Info.objects.filter(pk=del_id).delete()  # 不能直接删除
    models.Info.objects.filter(pk=del_id).update(is_delete=True)
    return redirect('/user_list/')

ORM创建表关系

"""
	一对一
	一对多
	多对多
"""

图书表   出版社表  作者表  作者详情表
# 作者与作者详情表是一对一的关系
'''外键字段建在任何一方都可以,一般建在查询频率较高 的表'''
info_id = models.OneToOneField(to='info')  # 不管位置在哪儿都给对方表加上引号
,on_delete=models.CASCADE  # 如果是Django2以上需要在括号里加这句,Django1默认级联更新级联删除

# 图书和作者是多对多的关系
'''外键字段建在第三张表,使用虚拟字段建立第三张表,虚拟字段建在任何一张表中都是可以的,建在查询频率较高的一张表'''
authors = models.ManyToManyField(to='author')  # authors是一个虚拟字段,不会在book表中创建出authors字段,作用就是用来告诉Django创建第三张表

# 图书和出版社是一对多的关系
'''外键字段建在多的一方,书是多,外键建在book表中'''
publish_id = models.ForeignKey(to='Publish',to_field='id')  # 如果关联的事对方表的主键可以省略不写,否则必须写上to_field='?'

'''用ORM创建以上三种关系'''
# 创建外键关系的时候,先创建一张表中得基础字段,在创建外键字段

'''在django1中,默认是级联删除级联更新'''
'''在django2中,现在的创建代码就不行了'''


on_delete参数

on_delete
当删除关联表中的数据时,当前表与其关联的行的行为。

models.CASCADE
删除关联数据,与之关联也删除

models.DO_NOTHING
删除关联数据,引发错误IntegrityError

models.PROTECT
删除关联数据,引发错误ProtectedError

models.SET_NULL
删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

models.SET_DEFAULT
删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

models.SET
删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

Django请求生命周期

img

WSGI, uWSGI, uwsgi一文搞

# WSGI是一个协议,wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uwsgi需要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就需要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface)

标签:username,models,request,Django,user,password,id
From: https://www.cnblogs.com/juzixiong/p/17347665.html

相关文章

  • mysql主从:mysql 主从、django使用多数据库做读写分离
    目录一、mysql主从介绍搭建步骤二、django使用多数据库做读写分离一、mysql主从介绍MySQL主从复制是一种常见的数据库复制技术,可以将一个MySQL数据库的数据复制到多个从库中,从而提高读取性能和数据可用性。在主从复制中,主库是数据的源头,从库是数据的副本,主库将数据变更记录......
  • Django4全栈进阶之路5 对各类数据库连接设置
    Django4支持多种类型的数据库连接,包括MySQL、PostgreSQL、SQLite、Oracle等。对于不同类型的数据库,需要进行不同的设置。下面是Django4对各类数据库连接的设置方法。MySQL在Django4中连接MySQL数据库,需要使用django.db.backends.mysql引擎。在settings.py文件中......
  • Django笔记二十九之中间件介绍
    本文首发于公众号:Hunter后端原文链接:Django笔记二十九之中间件介绍这一节介绍一下Django的中间件。关于中间件,官方文档的解释为:中间件是一个嵌入Django系统的request和response的钩子框架,是一个能够全局改变Django输入/输出的系统。我们可以这样理解,一个request......
  • Django4全栈进阶之路3 Model模型
    在Django中,模型(Model)是用于定义数据结构的组件,其作用如下:定义数据结构:模型用于定义数据库中的表格和表格中的字段(列),其中每个模型类对应一个表格,模型中的每个字段对应表格中的一列。模型的定义可以在 models.py 文件中完成。数据库操作:模型提供了简单易用的API用于操作......
  • django生命周期和路由层
    django生命周期https://www.yuque.com/liyangqit/cbndkh/evyps8django路由层1.路由匹配 django2.X及以上path第一个参数写什么就匹配什么 django1.X第一个参数是正则表达式 无论什么版本django都自带加斜杠后缀的功能也可以取消 配置文件中APPEND_SLASH=False#默......
  • mysql 主从,django操作读写分离
    目录mysql主从搭建步骤1.准备两台机器2.创建文件夹,文件(目录映射)3编写mysql配置文件(主,从)重要启动mysql容器,并做端口和目录映射连接主库修改新建用户连接从库修改配置django操作多数据库方法1.配置文件2.手动读写分离3.自动读写分离4.配置文件添加新点mysql主从目的: 主要做读......
  • Django全栈进阶之路3 Django4项目APP
    Django4项目APPdjango-adminstartappapp01或pythonmanage.pystartappapp01 #app01是app名称    PyCharm的样子:  ......
  • 1 python操作哨兵 、2 python操作集群、3 缓存优化、4 mysql 主从 、5 django使用多数
    目录1python操作哨兵2python操作集群3缓存优化3.1redis缓存更新策略3.2缓存击穿,雪崩,穿透4mysql主从5django使用多数据库做读写分离1python操作哨兵#高可用架构后---》不能直接连某一个主库了---》主库可能会挂掉,后来它就不是主库了#之前学的连接redis的操作,就用不......
  • Django静态文件,链接数据库,DRM操作
    目录配置文件的介绍静态文件的配置request对象form表单Django链接数据库(MySQL)(掌握)Django的ORM操作ORM基本语句数据的增查模板变量的分配配置文件的介绍SECRET_KEY='0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'#盐DEBUG=True#调试模式,等项目上线的时候......
  • mysql主从-day1——mysql主从搭建、django中使用多数据库做读写分离
    目录一、mysql主从5django使用多数据库做读写分离一、mysql主从#之前做过redis的主从,很简单#mysql稍微复杂一些,搭建mysql主从的目的是? -读写分离-单个实例并发量低,提高并发量-只在主库写,读数据都去从库#mysql主从原理步骤一:主库db的更新事件......