共计 3748 个字符,预计需要花费 10 分钟才能阅读完成。
用 Django 写一个繁难的漫画网站
玩爬虫的时候,喜爱用它来爬漫画。漫画爬到手了,然而没有分类,找起来挺麻烦的,浏览体验感也不好,于是就想写一个简略的漫画网站
源码传送门
一些唠叨
为什么要写漫画网站,为什么不必治理漫画的软件
想写漫画网站次要还是想通过一个开发的过程去理解它们是怎么做到业务解决与交互的。用实际的形式搞清楚一些原理与逻辑。目前还在学习阶段,应用漫画管理软件不利于晋升本人的 学习能力。再说这个我的项目也是拿来练练手的哈哈哈。
相干技术
- 前端框架:Bootstrap
- web 框架:Django
- 数据库:MySQL
运行环境与工具
- 编译器:pycharm
- python3.8
这个我的项目没有采纳前后端拆散的形式,所以真的是简略漫画网站
网站性能
- 瀑布式浏览
- 搜寻
- 分类
- 目录
- 后盾治理
效果图如下(界面也非常简单)
首页:
漫画详情页:
搜寻:
搜寻后果:
漫画内容:
后盾治理:
分类管理:
章节治理:
我的项目详情
目录构造
comicweb
│ manage.py
├─comic
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ ├─static
│ │ └─comic
│ │ ├─css
│ │ ├─fonts
│ │ └─js
├─comicweb
│ │ asgi.py
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
└─templates
│ base.html
└─comic
│ category_list.html
│ chapter_src.html
│ comic_chapter_list.html
│ errors.html
│ index.html
│ results.html
数据关系模型
配置 settings.py
没有应用 django 自带的 sqlite3 数据库,应用外连的数据库,须要做以下的配置
comicweb/comicweb/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '', #数据库名'HOST':'', #本地写 127.0.0.1,服务器就写 ip
'PORT':'3306', #MySQl 端口
'USER':'', #用户名'PASSWORD':'' #明码
}
}
Django 有自带的后盾治理,然而界面太丑了,所以我这里应用的是 simpleui 这个插件,先装置再配置
装置:
pip install django-simpleui
配置:
INSTALLED_APPS = ['simpleui',]
登录后盾的时候,记得先注册超级用户
注册 Admin
- comicweb/comic/apps.py
class ComicConfig(AppConfig):
name = 'comic'
verbose_name = '漫画治理'
- comicweb/comic/admin.py
别离注册漫画治理,分类管理,章节治理类
from .models import Comic, Category, Charter
admin.site.site_header = '后盾' # 设置 header
admin.site.site_title = '治理后盾' # 设置 title
admin.site.index_title = '治理'
class ComicAdmin(admin.ModelAdmin):
list_display = ['comic_id', 'comic_name', 'category', 'author', 'context', 'pictures']
fields = ['comic_id', 'comic_name', 'category', 'author', 'context', 'pictures']
class CategoryAdmin(admin.ModelAdmin):
list_display = ['id', 'type_name']
class CharterAdmin(admin.ModelAdmin):
list_display = ['charter_id', 'charter_name', 'comic_id']
admin.site.register(Comic, ComicAdmin)
admin.site.register(Charter, CharterAdmin)
admin.site.register(Category, CategoryAdmin)
路由
# comicweb/comic/urls.py
app_name = 'comic'
urlpatterns = [path('',views.Index,name='index'),
path('comic/<int:comic_pk>',views.comic_chapter,name='comic_chapter_list'),
path('chapter/<int:charter_pk>',views.chapter_src,name='chapter_src'),
path('search/',views.search,name='search'),
path('category/<int:pk>',views.category,name='category_list'),
]
网站包含 5 个路由
pk 能够了解为 id
- / : 网站首页
- /comic/:comic_pk : 漫画详情页面
- /chapter/:charter_pk : 漫画章节详情页面
- /search: 搜寻页面
- /category/:pk : 分类页面
视图
- 搜寻模块
def search(requset):
q = requset.GET.get('q')
error_msg = ''
if not q:
error_msg = '请输出关键词'
return render(requset,'comic/errors.html',{'error_msg':error_msg})
comic_list = Comic.objects.filter(comic_name__icontains=q)
return render(requset,'comic/results.html',{'error_msg':error_msg,
'comic_list':comic_list})
- 分类模块
def category(request,pk): categories = Category.objects.get(id=pk) category_comics = categories.comic_set.all() return render(request,'comic/category_list.html',context={'categories':categories,'category_comics':category_comics})
- 漫画章节模块
def comic_chapter(request,comic_pk): comic_details = Comic.objects.get(comic_id=comic_pk) comic_chapters = comic_details.charter_set.all() return render(request,'comic/comic_chapter_list.html',context={'comic_details':comic_details,'comic_chapters':comic_chapters})
- 章节漫画图片模块
def chapter_src(request,charter_pk): chapter_detials = Charter.objects.get(charter_id=charter_pk) temp_src = chapter_detials.src comic_srcs = temp_src.split(',') return render(request,'comic/chapter_src.html',context={'comic_srcs':comic_srcs})
template 模块
这一部分属于前端代码局部,我前端相干常识学的不是很好,所以写的有点乱,
这里就不赘述了,能够看我的项目源码
base.html # 根本页面模板,其余页面是继承该模板的根底上再写一些成果 category_list.html # 分类列表 chapter_src.html # 章节漫画图 comic_chapter_list.html # 漫画详情 errors.html # 出错提醒页面 index.html # 主页面 results.html # 搜寻返回后果的页面
有余的中央
这个网站真的还有很多有余的中央,也没有进行优化,分页,轮播图,具体分类面板等性能都没有开发好。后续应该会欠缺的!
申明
本网站的漫画是通过爬取其余漫画网站的漫画作为数据源,出于此起因,这里采集的漫画数据将不在开源范畴内。
最初
把代码开源进去,只不过是想记录本人摸索整个漫画网站是怎么造成的,因为网上根本没有什么教程教怎么写漫画网站,不过参考他人的我的项目能够失去一些思路。Django 对于小我的项目,的确有点小材大用了哈哈哈,至于为什么抉择 Django,是因为过后只会用 Django 这一个框架(有点偏执了)而且它自带后盾。