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限免的文件夹,如果没有则新建)
)