通过简单示例,使用django完成基本流程的开发,学习django的主要的知识点。
环境搭建
使用anaconda建立虚拟环境,conda create -n django_nirvanaInFire python==3.6
优点:不影响本地安装的全局解释器,避免包的混乱和版本冲突。
定义模型
本例完成“人物——榜单”信息的维护,需要存储两种数据:榜单,人物。
榜单表结构设计:
榜单表名称——Leaderboard
榜单名称:boardtitle
发布时间:bpub_time
人物表结构设计:
人物表名称——HeroInfo
名称:hname
性别:hgender
简介:hcontent
所属榜单:hboard
榜单——人物:一对多
class Leaderboard(models.Model):
boardtitle=models.CharField(max_length=50)
bpub_time=models.DateTimeField()
def __str__(self):
return '%d'%self.pk
class HeroInfo(models.Model):
hname=models.CharField(max_length=20)
hgender=models.BooleanField()
hcontent=models.CharField(max_length=1000)
hboard=models.ForeignKey('Leaderboard',on_delete=models.CASCADE)
def __str__(self):
return '%d'%self.pk
数据库配置在setting中,默认sqlite。
如果在新建app中开发,需要注册应用,在setting中的INSTALLED_APPS中添加即可。
使用后台管理
管理部分分为内容发布和公共访问。
内容发布部分主要负责增删改操作,django会根据定义的模型类自动生成管理模块。
class LeaderboardAdmin(admin.ModelAdmin):
list_display = ['boardtitle','bpub_time']
# inlines = [HeroInline]
class HeroInfoAdmin(admin.ModelAdmin):
list_display = ['hname','gender','hcontent','hbtitle']
list_filter = ['hname']
search_fields = ['hname','hcontent']
list_per_page = 3
admin.site.register(Leaderboard,LeaderboardAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)
编写视图
模块url需要在主url中定义。
urlpatterns = [
path('admin/', admin.site.urls),
path('board/',include('leaderboard.urls'))
]
定义视图函数
def index(request):
boardlist=Leaderboard.objects.all()
return render(request,'leaderboard/index.html',context={'boardlist':boardlist})
定义模板
定义前端模板,支持模板渲染。
<h1>{{ board.boardtitle }}</h1>
<ul>
{% for hero in heros %}
<li>{{ hero.hname }}---{{ hero.hcontent }}</li>
{% endfor %}
</ul>