4、Django-模板,Admin站点,rest设计风格,drf安装配置

14 篇文章 1 订阅
7 篇文章 0 订阅
模板
  1. 在 templates 目录中新建一个模板文件,如:index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>{{ name }}</h1>
        <h1>{{ my_list.0 }}</h1>  
        <h1>{{ my_dict.name }}</h1> 
    </body>
    </html>
    
  2. 在settings.py中,配置模板目录

    'DIRS': [os.path.join(BASE_DIR, 'templates')]
    
  3. 在视图中渲染使用模板

    def index(request):
        context = {
            'name': 'django',
            'my_list': ['python', 'java', 'php', 'c/c++'],
            'my_dict': {
                'name': 'python',
                'age': 20,
                'gender': '男',
            }
        }
        
        # 方式1
        ''' 
        template = loader.get_template('index.html')  
        html_str = template.render(context)
        return HttpResponse(html_str)
    	'''    
        # 方式2
        return render(request, 'index.html', context)
    
Admin站点使用
  1. 修改语言和时区

     LANGUAGE_CODE = 'zh-hans'   
     TIME_ZONE = 'Asia/Shanghai'  
    
  2. 创建超级管理员账号:

    python manage.py createsuperuser
    
  3. 注册模型类到后台

    # users/admin.py:
    from app01.models import Department, Employee
    
    class DepartmentAdmin(admin.ModelAdmin):
    	# 在管理后台显示哪些字段信息
    	list_display = ['id', 'name', 'create_date', 'is_delete']
        
    # 注册模型管理类时,指定ModelAdmin类
    admin.site.register(Department, DepartmentAdmin)
    
  4. 登录管理后台 http://127.0.0.1:8000/admin,对数据进行增删改查管理

admin站点列表页控制
# admin.py
class DepartmentAdmin(admin.ModelAdmin):
	# 在管理后台显示哪些字段信息
	list_display = ['id', 'name', 'create_date', 'is_delete']

	# 每页显示的条数
	list_per_page = 3

	# 显示或隐藏操作栏
	actions_on_top = True
    actions_on_bottom = True
    
    # 显示过滤栏: 按性别和部门过滤
    list_filter = ['gender', 'department']
    
    # 搜索部门名称
    search_fields = ['name']
    
# 注册模型管理类时,指定ModelAdmin类
admin.site.register(Department, DepartmentAdmin)		   
Admin站点上传图片(ImageField字段使用)
  1. 实现图片上传功能需要使用Pillow包,安装pillow

    pip install Pillow
    
  2. settings.py配置文件中,配置上传的图片保存在哪个目录下

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
  3. 模型类对应的字段类型要使用ImageField:

    class TestUser(models.Model):
        name = models.CharField(max_length=20)
    	# 用户头像     upload_to='users': 上传的文件保存在 users子目录下
        avatar = models.ImageField(upload_to='users', null=True)
    
  4. 迁移更新数据库表

    python manage.py makemigrations
    python manage.py migrate
    
  5. 注册模型类到admin站点

# admin.py
admin.site.register(TestUser)
  1. 测试:进入管理后台,新增一条数据,上传图片。
web应用开发模式
  • 前后端不分离

    • 服务器既要处理业务逻辑,又做渲染模板操作
    • 服务器返回html页面或作重定向
    • 服务器返回html页面不适用于移动端应用(android, ios)
  • 前后端分离

    • 服务器仅处理业务逻辑,不做渲染模板操作
    • 服务器不返回html,而是返回json/xml
    • 服务器能够同时给pc端和移动端应用提供服务

接口开发(API开发): 定义视图和路由,并返回json/xml数据;

RESTful设计风格

RESTful: 接口开发(接口定义)一种被普遍采用设计风格

  • 通过url知道 操作的数据是什么
  • 通过 请求方法就知道,是做什么操作(增删改查)
  • 通状态码知道操作的结果

/employees/?gender=0&page=1

/employee/0/1

请求方法请求地址后端操作
GET/goods获取所有商品
POST/goods增加商品
GET/goods/1获取编号为1的商品
PUT/goods/1修改编号为1的商品
DELETE/goods/1删除编号为1的商品
  • URL
    ​ 代表一种资源/数据
    ​ 不使用动词
  • 请求方法
    ​ GET 查询
    ​ POST 添加
    ​ PUT 修改
    ​ DELETE 删除
  • 状态码
    ​ 200 请求成功(查询、修改)
    ​ 201 新建成功
    ​ 204 删除成功
    ​ 400 请求有误(请求参数有误)
    ​ 401 用户未认证
    ​ 403 没有权限访问
    ​ 404 数据不存在
  • 响应数据
    ​ 查询:返回查询到的数据
    ​ 新增:返回新增的数据
    ​ 修改:返回修改后的数据
    ​ 删除:无需返回数据
接口开发核心工作

imgs

imgs

  • 序列化:对象 --> json

  • 反序列化:json --> 对象

  • 参数合法性校验

  • 业务数据增删改查

案例-使用django开发【重要】

serializable: 序列化: 模型类对象(查询集) --> 字典(列表) --> json/xml

反序列化: json/xml -> 字典 --> 模型类对象

参照讲义的代码

DRF-环境安装与配置

安装drf包

pip install djangorestframework

注册drf应用

INSTALLED_APPS = [
    ...
    'rest_framework',    # 注册drf应用
]
DRF-第一个DRF例子
  1. 定义序列化器

    创建序列化器
    # rest/serializers.py
    class DepartmentSerializer(serializers.ModelSerializer):
        """部门序列化器"""
    
        class Meta(object):
            # 关联的模型类
            model = Department
            # 表示包含模型类中的所有属性
            fields = '__all__'
    
  2. 编写视图
    class DepartmentViewSet(ModelViewSet):
        # 指定查询集
        queryset = Department.objects.all()
        # 指定视图使用的序列化器
        serializer_class = DepartmentSerializer
    
  3. 注册路由

    # rest/urls.py
    urlpatterns = [
        ...
    ]
    
    # 注册路由(包含了多个url配置项)
    router = DefaultRouter()
    router.register(r'departments', views.DepartmentViewSet)
    urlpatterns += router.urls   # 把生成的路由地址 追加到 django 的路由列表中
    
  4. 使用 drf 的模板界面进行测试:

    # 在浏览器中访问,进行接口测试
    http://127.0.0.1:8000/departments/
    http://127.0.0.1:8000/departments/1/
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值