Django规范化编程2

Task 4 Request获取对象并保存在数据库 (Add功能)
# view中创建一个新事务
def trying_add(request:HttpRequest):
    name = request.GET.get('name','')
    level = request.GET.get('level',30)
    play_value = request.GET.get('hour',0.0)
    level = int(level)
    play_value = float(play_value)
    print(type(name),type(level),type(play_value))
    print(str(name),str(level),str(play_value))
    # 创建新对象,并赋值
    new_player = PlayerEntity()
    new_player.level = level
    new_player.virture_name = name
    new_player.play_valu = play_value
    # 模型一定要保存
    new_player.save()

    # 这个对象仔细看并没有self的封装,意味着我们赋值更方便一点
    return render(request,'add_model.html',locals())

# url路径在多写一个路由
urlpatterns = [
    path('try2/',trying),
    path ('add_try/',trying_add)
]

# 访问如下的url
# http://127.0.0.1:8000/son/add_try/?name=%27%E5%B0%8F%E5%8F%AF%E7%88%B1%27&level=24&hour=13.8

在这里插入图片描述

我们重新访问原来的getall,可以发现数据已经被存入数据库中, (id 会自增)

在这里插入图片描述

Task5 Get, Update与Delete 功能

先实现Get功能,在Get的基础上使用接口即可完成delete与update

# views
def get_player(request:HttpRequest):
    id = request.GET.get('id',None)
    if id is None :
        return render(request,'No_args.html',locals())
    try:
        id = int(id)
        Player = PlayerEntity.objects.get(id=id)
        return render(request,'select.html',locals())
    except:
        return HttpResponse('<h2>NO Player own this id</h2>',status=404)

# 路由我也不罗嗦了,直接上结果

在这里插入图片描述

在get的基础上进行User的Update 以及 Delete即可

# UPDATE
Player.level = 99
Player.save()
# DELETE
Player.delete()
Task5 Model托管给admin
# 模型的大范围参数修改
class PlayerEntity(models.Model):
    # 默认会生成ID, 不用自己写
    # verbose表示属性名
    virture_name = models.CharField(default = 'GodForever',max_length=20,verbose_name='昵称')
    level = models.IntegerField(default = 1,verbose_name='等级')
    play_valu = models.FloatField(default=0.0,verbose_name='游玩时间')
    # 设置存放的数据库表名

    class Meta:
        db_table = 'player_Inform'

        # 重写表名
        verbose_name = '巅峰玩家'
        verbose_name_plural = verbose_name

#  admin.py托管
# Admin托管的显示字段类
class PlayerAdmin(admin.ModelAdmin):
    fileds = ['id','virture_name','level','play_valu']
    list_display = ('id','virture_name','level')
    list_per_page = 2
	# 排序过滤,见下图右侧
    list_filter = ['level']
    # 可检索的属性
    search_fields = ['virture_name','id']


# 在admin中注册我们的PlayerAdmin
admin.site.register(PlayerEntity,PlayerAdmin)

在这里插入图片描述

差不多一个后台就完成了

Task6 Setting配置FileField

文件字段和图片字段都属于MEDIA的多媒体类型文件,需要在settings.py中设置脚本文件指定:MEDIA_ROOT(用户上传媒体文件存放位置), MEDIA_URL(用户上传媒体文件访问路径) , STATIC_URL(静态文件的存放位置), STATICFILES_DIR(静态文件存放路径)

#settings.py
#Settings中至少已经给我们配置好了Static_url
STATIC_URL = 'static/'
#真男人直接冲官方文档

How to manage static files (e.g. images, JavaScript, CSS) | Django 文档 | Django (djangoproject.com)

# 在settings中配置

STATIC_URL = 'static/'
# 模型类中使用上传文件的访问地址
MEDIA_URL = 'media/'
# 模型类中使用上传文件的保存地址
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

# 添加到总路由 urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
	.......
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# 给model添加一个Image属性
# apps/model.py
profile_picture = models.ImageField(verbose_name='头像',null=True)

# 在admin中增加一下想要的属性
class PlayerAdmin(admin.ModelAdmin):
    list_display = ('id','virture_name','level','profile_picture')

# 进行迁移(需要pillow, pip一下)

在这里插入图片描述

然后我上传了一张图片,展现的样子1是这样的,一张可以跳转的超链接,点进去也是可以查看的(Over)

图片可以加宽高限制:

profile_picture = models.ImageField(verbose_name='头像',
                                    null=True,width_field = a(int),
                                    height_filed = (int),
                                    upload_to = DIR(传入路径,传到主URL限免的文件夹,如果没有则新建)
                                   )

转存中…(img-7YX7l732-1647264341979)]

然后我上传了一张图片,展现的样子1是这样的,一张可以跳转的超链接,点进去也是可以查看的(Over)

图片可以加宽高限制:

profile_picture = models.ImageField(verbose_name='头像',
                                    null=True,width_field = a(int),
                                    height_filed = (int),
                                    upload_to = DIR(传入路径,传到主URL限免的文件夹,如果没有则新建)
                                   )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值