15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > python Django网页开发实战(1)

python Django网页开发实战(1)

时间:2023-09-05 00:00:01 | 来源:网站运营

时间:2023-09-05 00:00:01 来源:网站运营

python Django网页开发实战(1):最近一直在学习Django网页开发的内容,今天用Django简单的做一个电影页面网页,初步结果见图,总共分为三个步骤,数据获取(爬虫)、网页界面设计(html)、网页开发(Django),下面就一步一步来详细的讲解。

1、数据获取

使用爬虫从豆瓣电影网站上获取所需要用到电影资源,不会爬虫的小伙伴可以参考之前更新的爬虫实战专栏,由于最后要将爬取到的数据显示在网页上,这就需要一个中间数据库进行存放,这里将爬取到的数据直接存到Mysql数据库中,具体见下面代码。

1.1连接数据库,并创建数据表

爬取到的数据分为四个字段——电影名称、封面、电影描述、播放地址

import requestsimport csvfrom lxml import etreeimport pymysqlimport jsonimport reclass ConnMysql(): def __init__(self): # 连接数据库 self.db = pymysql.connect(host='localhost', port=3306, database='douban',#数据库名称 user='root', password='******',#数据库密码 charset='utf8') self.cursor = self.db.cursor() self.cursor.execute("DROP TABLE IF EXISTS movie") sql = ''' create table movie ( name Char(255), cover CHAR (255), disc TEXT (2555), address char (255)); ''' self.cursor.execute(sql) print('连接成功') def insert(self,dict1): # 将数据添加到数据库中的movie表中 sql = "insert into movie (name,cover,disc,address) values(%s,%s,%s,%s)" data = [dict1['name'],dict1['cover'],dict1['disc'],dict1['address']] try: self.cursor.execute(sql,data) self.db.commit() # 提交操作 except: self.db.rollback()1.2 爬取数据

将爬取到的数据存入数据库

class Douban(): def __init__(self): self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',} self.num=1000#爬取1000个数据,够我们用啦 self.url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start={}' self.douban_movie() def douban_movie(self): for page in range(0,self.num,20): print('开始第%s页'%page) self.get_url=self.url.format(str(page)) self.r=requests.get(url=self.get_url, headers=self.headers) self.r.encoding='utf-8' self.json_text=json.loads(self.r.text) self.parse_text() def parse_text(self): for moive_list in self.json_text['data']: # print(type(moive_list)) self.moive_name=moive_list['title'] self.movie_url=moive_list['url'] self.movie_cover=moive_list['cover'] self.parse_content() self.item={ 'name':self.moive_name, 'cover':self.movie_cover, 'disc':self.disc, 'address':self.movie_url, } self.save_data() def parse_content(self): self.r_disc = requests.get(url=self.movie_url, headers=self.headers) tree = etree.HTML(self.r_disc.text) self.disc = tree.xpath('//div[@id="link-report"]/span/text()') # /H4/a/@href' self.disc=re.sub(r'[/]//n ( /,)//u3000/[/']','',str(self.disc)) def save_data(self): database.insert(self.item)if __name__ == '__main__': database = ConnMysql() movie = Douban()1.3打开Navicat Premium,连接数据库,可以看到在总的数据库中有douban数据库,其下面有movie列表,打开之后可以发现爬取到的数据已经全部存入到数据库中了。

当然,你也可以不直接存数据库中,向之前学习爬虫一样存入csv文件中,最后通过数据库进行导入(右键数据库-导入导向,根据提示一步一步导入)

2、网页页面设计

这个由于没学过HTML,所以就直接百度一个html模板,然后稍加修改,大家可以自行百度自己比较喜欢的网页模板。

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> /*解决页面浮动后的塌陷问题*/ .clearfix{ zoom:1; } .clearfix:after{ content: ''; display: block; visibility: hidden; line-height: 0; clear:both; } body,div{ margin: 0 auto; } div{ border: 1px solid gray; width: 750px; text-align:center; } ul{ list-style-type: none; display: inline-block; } #header li{ float:left; margin-left: 10px; font-size: 16px; font-family: '微软雅黑'; color:#666666 } #header li:hover{ cursor:pointer; background: blue; color:white; } #content li{ float:left; display: inline; margin-right: 15px; text-align: center; height: 120px; width: 120px; overflow: hidden; padding-top:10px; padding-bottom: 5px; } #content h1{ font-size:14px; margin:0; } .tip{ display: block; font-size: 12px; } .h1,.tip{ width:110px; text-align: center; } #content ul{ margin:0; margin-left: 55px; padding:0; } </style></head><body> <div id="header" class="clearfix"> <ul class="'clearfix"> <li>首页</li> <li>电影</li> <li>电视剧</li> <li>动漫</li> <li>综艺</li> <li>音乐</li> <li>MV</li> <li>视频</li> <li>短片</li> <li>公开课</li> </ul> </div> <div id="content"> <ul class="clearfix"> {% for movie in movies %} <li> <a href="{{ movie.address }}"><img src="{{ movie.cover }}" width="80px" height="80px"/></a> <h1 class="h1">{{ movie.name }}</h1> <span class="tip"> {{ movie.disc }}</span> </li> {% endfor %} </ul> </div> <div> <a href="/movie/?num={{ pre_page_num }}">上一页</a> <a href="/movie/?num={{ next_page_num }}">下一页</a> </div></body></html>3、Django网页开发

有了数据和网页模板,下面就可以直接用Django开发了,在pycharm中可以直接创建django文件。名称自行命名

创建好的文件列表如下图所示,将网页模板放到templates文件下,后续所有的网页显示的都放入这个文件夹下

接着在pycharm终端中输入Python manage.py startapp movieshow,用以创建app,后面网页上的操作在这个文件夹下进行

创建完成之后在settings中将刚创建的app写入最后一行,同时在settings里进行数据库的连接

做完这些之后,进行主url访问设置,这里是你想最后在网址栏输入啥名称就在路径一栏写啥,这里写入movie/,注意加斜杠;

from django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path('admin/', admin.site.urls), path('movie/',include('movieshow.urls'))]设置完主url之后,在app中urls中进行子url设置,没有这个py文件的,右键新建一个,命名为urls

from django.urls import pathfrom . import viewsurlpatterns = [ path('',views.index_view),]接着进行数据库映射

在终端中输入,将数据库中的字段映射到models中

D:/pythonstudy/django/movie>python manage.py inspectdb>movieshow/models.py映射完成之后,可以发现在models中有字段的一些信息

class Movie(models.Model): name = models.CharField(max_length=255, blank=True, primary_key=True) cover = models.CharField(max_length=255, blank=True, null=True) disc = models.TextField(blank=True, null=True) address = models.CharField(max_length=255, blank=True, null=True) class Meta: managed = False db_table = 'movie'完成以上操作之后,就可以在views中进行相关网页的显示与操作了

def page(num,size=20): num=int(num) #总记录数 total=Movie.objects.count() totalpage=int(math.ceil(total*1.0/size)) #是否越界 if num<1: num=1 if num>totalpage: num=totalpage #每页显示记录 movies=Movie.objects.all()[((num-1)*size):(num*size)] # print(movies) return movies,numdef index_view(request): #接收前端请求参数 num=request.GET.get('num',1) #处理分页 movies,n=page(num) print(movies) #查询所有数据 # movies=Movie.objects.all() #上一页 pre_page_num=n-1 next_page_num=n+1 return render(request,'index01.html',{'movies':movies,'pre_page_num':pre_page_num,'next_page_num':next_page_num}) # return None


最后点击运行,在下面出现下面,说明连接启动,在网页中写入url网址进行显示

点击下一页可显示下页的内容

至此结束,讲的比较粗糙,但思路应该比较清晰,先干啥后干啥,有啥不明白的欢迎留言和评论。

关键词:实战

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭