首页 > 其他分享 >django之路由层和反向解析

django之路由层和反向解析

时间:2022-12-12 17:46:37浏览次数:48  
标签:name py django html 反向 user data 路由

目录

可视化界面之数据增删改查

项目初始化步骤

1.创建django项目,创建模板和静态目录,创建app

django-admin startproject djangoday03
cd djangoday03
mkdir templates
mkdir static
python38 manage.py startapp app01

image
2.pycharm打开新创建的djangoday03项目
3.修改templates路径(settings.py)

'DIRS': [os.path.join(BASE_DIR,'templates')],

4.注册app01(settings.py)

INSTALLED_APPS = [
 'app01',
]

5.修改数据库为mysql(settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day51',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'Abcd1234',
        'CHARSET':'utf8',
    }
}

6.添加静态路径支持(settings.py)

STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),
                    ]

7.post发送请求会报错注释其中的一行(settings.py)

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',
]

8.ORM数据模型准备(app01里面的models.py)

class User2(models.Model):
    # 主键字段可以不写 ORM会自动帮你创建一个id的主键字段
    name = models.CharField(max_length=32,verbose_name='用户名')
    age = models.IntegerField(verbose_name='年龄')

    # 便于对象打印之后的查看 不影响数据库 所以不需要执行迁移命令
    def __str__(self):
        return '用户对象:%s' % self.name

9.启动django服务

python38 manage.py runserver

10.执行数据库迁移相关命令(操作前确保没有相关表)

python38 manage.py  makemigrations  将操作记录到小本本上(migrations)
python38 manage.py  migrate			将操作同步到数据库上

11.对User2表填充相关数据

#登录数据库客户端day51库下进行操作,模拟数据
insert into app01_user2(name,age) values('jason',18),('tony',19),('winter',23),('jerry',28),('oscar',32);

访问用户数据的接口

1.添加路由及对应的功能函数(urls.py)

from app01 import  views
# 访问用户数据的接口
path('user_list/',views.user_list_func),

2.编辑视图层,添加后端功能(view.py)

from django.shortcuts import render,HttpResponse,redirect
from app01 import models

# Create your views here.

def user_list_func(request):
    # 1.获取user2表中所有的数据展示到html页面上
    user_data = models.User2.objects.filter()  # 括号内不填筛选条件等价于查看所有 QuerSet [对象1,对象2,对象3...]
    # 2.利用模板语法传递数据到html页面并完成处理最终返回给浏览器展示
    return render(request,'userListPage.html',{'user_data':user_data})

3.准备对应的userListPage.html文件

1.拷贝bootstrap-3.4.1-dist本地静态资源到static目录下
2.编写userListPage.html文件(templates目录)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <h1 class="text-center">数据展示页</h1>
            <div class="col-md-8 col-md-offset-2">
            <table class="table  table-hover table-striped">
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Name</th>
                        <th>Age</th>
                        <th class="text-center">Operation</th>
                    </tr>
                </thead>
                <tbody>
                    {% for user_obj in user_data %}
                        <tr>
                            <td>{{ user_obj.pk }}</td>
                            <td>{{ user_obj.name }}</td>
                            <td>{{ user_obj.age }}</td>
                            <td class="text-center">
                                <a href="#" class="btn btn-primary btn-xs">编辑</a>
                                <a href="#" class="btn btn-danger btn-xs delete">删除</a>
                            </td>
                        </tr>
                    {% endfor %}

                </tbody>
            </table>
            </div>
        </div>
    </div>
</body>
</html>

4.浏览器打开访问

http://127.0.0.1:8000/user_list/

image

数据添加

1.添加路由层(urls.py)

# 添加用户数据的接口
path('user_add/',views.user_add_func),

2.编辑视图层,添加后端功能(view.py)

def user_add_func(request):
    #1.先返回一个获取新增用户数据的html页面
    return render(request,'userAddPage.html')

3.创建对应userAddPage.html文件(templates目录)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <h1 class="text-center">数据添加页</h1>
            <div class="col-md-6 col-md-offset-3">
                <form action="" method="post">
                    <p>name:
                        <input type="text" name="name" class="form-control">
                    </p>
                    <p>age:
                        <input type="text" name="age" class="form-control">
                    </p>
                    <input type="submit" value="添加用户" class="btn btn-warning btn-block">
                </form>
            </div>
        </div>
    </div>
</body>
</html>

4.数据展示页面要添加一个数据添加入口(userListPage.html)

        <h1 class="text-center">数据展示页</h1>
            <div class="col-md-8 col-md-offset-2">
                <a href="/user_add/" class="btn btn-success">数据添加</a>  /添加这行/

5.再次编辑后端逻辑接口(views.py)

def user_add_func(request):
    #2.根据不同的请求方式做不同的处理
    if request.method == 'POST':
        #3.获取用户相关数据
        name_data = request.POST.get('name')
        age_data = request.POST.get('age')
        #4.继续一些小的判断
        if len(name_data) == 0 or len(age_data) ==0:
            return HttpResponse('用户名或年龄不能为空')
        user_data=models.User2.objects.filter(name=name_data)
        if user_data:
            return HttpResponse('用户名已存在')
        models.User2.objects.create(name=name_data,age=age_data)
        # 5.重定向到数据展示页
        return redirect('/user_list/')
    #1.先返回一个获取新增用户数据的html页面
    return render(request,'userAddPage.html')

image
image
image

django请求生命周期流程图

django路由层

反向解析

标签:name,py,django,html,反向,user,data,路由
From: https://www.cnblogs.com/winter-yu1989/p/16976722.html

相关文章

  • 基于角色的权限控制(django内置的auth体系)
    #RBAC(Role-BasedAccessControl:基于角色的访问控制)#django的auth就是内置了一套RBAC的权限系统#django中 #后台权限控制(公司内部系统,crm客户关系管理,erp,协同平台)......
  • 路由Routers
    路由Routers对于视图集ViewSet,除了可以自己手动指明请求方式与动作action之间,还可以使用Routers来快速实现路由信息restframework提供了两个routerSimpleRouterDefau......
  • 基于Django中间件引发的编程思想
    基于Django中间件引发的编程思想(重点)importlib模块使用能够以字符串的形式导入模块,最小单位只能到模块名#1.创建一个py文件aaa.py#2.创建一个mypach文件夹,里面创......
  • Vue 路由传参加密
    首先,创建一个base64.jsconstBase64={//加密encode(str){returnbtoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,function......
  • 思科路由器关联RADIUS服务器配置命
    Cisco(config)#aaanew-model //全局启动aaa1.关联Tacacs+服务器Cisco(config)#tacacsservers2Cisco(config-server-tacacs)#addCisco(config-server-tacacs)#addr......
  • Django自带的序列化组件
    Django自带的序列化组件(为drf做铺垫)(drf:djangorestframework)#在前端获取到,后端用户表里所有的数据,并且是列表套字典的格式#views.pyfromdjango.httpimport......
  • Django模型层
    模型层目录模型层1、测试脚本2、单表操作2.1、表准备2.2、操作2.3、常见13种单表查询方法3、Django终端打印SQL语句4、神奇的双下划线5、多表操作5.1、表准备5.2、一......
  • Django路由层
    路由层当⽤户在您的Web应⽤程序上发出⻚⾯请求时,Django会获取url中请求路径(端⼝之后的部分),然后通过urls.py⽂件查找与路径相匹配的视图,然后返回HTML响应或404未找到的错......
  • Django视图层
    视图层目录视图层1、三板斧2、JsonResponse对象3、form表单上传文件及后端如何操作4、request对象5、响应对象6、FBV与CBV视图响应的过程:当⽤户从浏览器发起⼀次请求时,......
  • Django框架
    目录(1)Django引入(2)Django基本操作(3)Django小白必会三板斧(4)静态文件配置(5)pycharm链接数据库(MySQL)(6)Django链接MySQL(7)Django的orm(8)Django请求周期流程图(重要)(9)Django路......