文章目录
由于工作需要,技术发展,博主认识到了传统的C/S将会被B/S取代,近期苦学Django,购买了一些书籍。本次运用自己所学写了个小的电影网站,主要用于展示电影信息,撰写此篇记录一下开发过程。
一.环境
1.开发环境
- Windows10 专业版
- Python3.8
- Django 3.2.15
- PyCharm 2018.2.2 x64
- 代码托管平台:码云(Gitee)
- MySQL-8.0.23
- Navicat 15 for MySQL
- Redis-4.0.10(Linux)
2.线上环境
- CentOS7.6
- MySQL-5.7
- Redis-4.0.10
- Nginx-1.20.2
- Python3.8
- Django 3.2.15
二.主要技术
1.Django
由于博主主要使用Python语言进行开发,遂选择了Django用作后端开发主要框架。
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。2019年12月2日,Django 3. 0发布。–摘自百度
2.MySQL
本次数据量不是很大,选择了主流的关系型数据库MySQL,数据表主要有:电影表、用户个人信息表、用户建议信息表…数据库可视化管理工具为Navicat 15 for MySQL。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。–摘自百度
3.Redis
本项目的一些缓存数据以及二维码校验数据均存储在Redis中,本次主要使用Redis的数据类型为哈希(hash)。
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。–摘自菜鸟教程
4.Nginx
由于本项目最终部署到本地虚拟机CentOS服务器上,虽然说是用作测试,但是我们仍然需要一个可以稳定而持续的服务器,所以选择了在服务器上部署Nginx+uwsgi,使用反向代理可以做到“动静分离”、“反向代理”、以及隐藏掉真实的服务器端口…这里介绍一下Nginx。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。–摘自百度
5.uwsgi
先介绍一下WSGI:
1.WSGI
全称 Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性。–摘自百度
2.uwsgi
与WSGI一样是uWSGI通信的一种协议,用于定义传输信息类型(type of information)。每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说是fcgi协议的10倍快。
它是一个全功能的http服务器,实现了WSGI规范、uwsgi协议、http协议等。它要做的就是把http协议转化为语言支持的网络协议。比如把http协议转化成WSGI规范,让python可以直接使用。
6.Bootstrap
本次页面的设计基于HTML5,前端主要使用jQuery、Bootstrap,使用Bootstrap可以帮助我们快速创建我们想要的前端页面。
Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。
三.整体架构
1.实现功能
2.技术架构
四.项目展示
1.电影
1.首页
2.搜索页
3.专题页
3.专题页
2.登录
1.登录-账密
2.登录-扫码
PS:本次真实模拟了扫码登录的逻辑。
3.建议反馈
4.个人中心-基本信息
成功登录之后可以收藏电影、提交建议、查看个人信息。
5.个人中心-我的收藏-全部
6.个人中心-我的收藏-按类别
五.技术心得
1.扫码登录
因为博主之前研究过b站的扫码登录逻辑,所以本次使用Redis配合Django实现相关登录信息的记录、认证,大致思路如下图:
六.一些配置&脚本
1.requirements
2.nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 81;
server_name localhost;
root /home/myProjects/django_projects/movie_god;
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8081;
}
location /static
{
alias /home/myProjects/django_projects/movie_god/static;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.start.sh
sudo /usr/bin/uwsgi /home/myProjects/django_projects/movie_god/uwsgi.ini --plugin python3 --wsgi-file /home/myProjects/django_projects/movie_god/uwsgi.py&
4.kill.sh
pid=
ps -ef|grep uwsgi|grep ini|grep movie_god|awk ‘{print $2}’sudo kill -9 $pid
七.总结
本次使用Django开发了一个很小的电影项目,我愿称之为阿雷影视,练习了Django的MVT架构,也学习到了一些前端后端的相关技术。