nginx+django网站搭建,实现图片视频分享及留言

本文介绍了如何利用Nginx作为代理服务器和Django框架来搭建一个支持用户登录、图片视频分享和留言功能的网站。详细阐述了Nginx的配置、Django项目的创建与应用开发,包括用户注册、登录,图片和视频的展示、操作与上传,以及留言系统的实现。
摘要由CSDN通过智能技术生成

本文将叙述基于代理软件nginx和web开发框架django搭建个人网站的过程中涉及到的技术,以实现用户登陆该网站后的图片、视频分享及留言互动功能。

  • 网站开发所采用的Nginx服务,是一款能实现请求分发,负载均衡和动静分离等功能的代理软件,用户请求目的网站时将先经过nginx再跳转至web应用。
  • Django框架则是用python语言开发,已封装好的便于使用的web开发工具,基于该框架的web开发将围绕MVT这一理念进行,M(Model,模型)对应的是与后台数据库进行映射的模型类,V(Views,视图)是接收请求后对后台数据库进行操作,并返回数据给前端展示的函数,T(Template,模板)则是对前端页面的设计。将网站搭建划分为MVT三大块,能更好地对项目进行解耦,以便开发者在开发过程中理清思路和项目在未来的扩展。

本文所搭网站所实现的功能,及网站前后端所用技术栈,分别由以下左右两图所示

下面将对网站搭建的关键技术和功能按照以下目录分别进行详述。

1. Nginx配置

Nginx的配置通过修改配置文件(通常为nginx.conf)实现,配置文件包括三大模块:全局块,events块和http块。我们主要关注http块中server块的配置,一个server块对应着一台应用服务器,其中的location块定义了对某些路由的处理。一个server模块的配置示例如下

    server {
   
        #nginx的监听端口(ipv4)
        listen       80 default_server;
        #nginx的监听端口(ipv6)
        listen       [::]:80 default_server; 
        #web应用的域名
        server_name  www.mywebsite.com;
        #包含nginx欢迎页面和错误页面的文件夹路径
        root         /usr/share/nginx/html;
        #web应用下 / 的路由匹配
        location / {
   
            #proxy_pass表示将请求转发到以下web应用服务器的ip地址及端口
        	proxy_pass http://127.0.0.1:8000;
        }
        #web应用下 /static/ 的路由匹配
        location /static/ {
   
           #alias表示将路由中的"https://www.mywebsite.com/static/"替换为以下nginx服务器上的路径,实现静态文件
           #直接从nginx所在服务器获取,减轻web应用服务器的压力
			alias /home/admin/application/static/;
		}
        #错误页面的路由匹配
        error_page 404 /404.html;
            location = /40x.html {
   
        }
        #错误页面的路由匹配
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
   
        }
    }

2. Django项目

基于django框架的Web项目可被划分为配置部分和应用部分。配置部分给定了项目的路径,所包含的应用,数据库的属性,模板的路径等信息,也给出了url路由的第一级匹配;应用部分则根据网站的功能进行划分,不同的功能块由不同的应用模块实现。

2.1 项目开发

  • 项目创建:在python环境中安装了django框架以后,可用以下命令创建一个web应用项目
django-admin createproject myProject

    该命令将会创建一个项目文件夹/myProject/以及文件manage.py。

  • 项目配置:项目配置文件夹是创建项目时项目下已有的一个同名python包。该python包中的关键文件为settings.py以及urls.py。
    settins.py文件中包含了项目路径,访问权限,调试模式,所采用的数据库,模板文件路径,所创建的应用,所采用的中间件,异步框架celery,网站API搭建工具rest_framework等配置信息。相关配置变量的示例如下
import os
#项目的绝对地址
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#是否处于调试模式(调试模式会在出错网页上显示具体的错误信息)
DEBUG = True
#允许访问的ip地址
ALLOWED_HOSTS = ['*']
#所定义的的应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    #用户创建的应用
    'myApp1',
    'myApp2',
  	'myApp3',
]
#中间件信息
MIDDLEWARE = [
    'utils.middleware.RunTimeMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'utils.middleware.XForwardedForMiddleware'
]
#第一级url定义的所在的文件
ROOT_URLCONF = 'myProject.urls'

#模板文件信息
TEMPLATES = [
    {
   
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'tempplate')],
        'APP_DIRS': True,
        'OPTIONS': {
   
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
#所采用的数据库信息
DATABASES = {
   
    'default': {
   
        'NAME': 'core',
        'HOST': DATABASE_IP,
        'ENGINE': 'django.db.backends.mysql',
        'USER': DATABASE_USER,
        'PASSWORD': DATABASE_PASSWORD,
        'port': '3306'
    }
}

    另外可将数据库的用户名,密码等隐私信息置于secret_settings.py中并通过

from configs.secret_settings import *

    引入到setting.py文件中。
    urls.py文件即是settings.py种ROOT_URLCONF变量所指向的文件。在该文件中,列出了在网站域名后可匹配的第一级url,语法实例如下

urlpatterns = [ 
    #主页对应的视图类
    url(r'^$', IndexDetail.as_view()),
    #myApp1.api_urls中定义了下一级url匹配情况
    url('^api/', include('myApp1.api_urls')),
    #myApp1.urls中定义了下一级url匹配情况
    url('App1/', include('myApp1.urls')),
]

    其中include()中为下一级url匹配的文件,若没有下一级匹配,则可写上所对应的视图函数。

  • 项目调试:本地调试命令如下
python manage.py runserver -h 127.0.0.1 -p 8000
  • 项目部署:

2.2 应用开发

在web项目开发过程中,通常将其划分为不同功能的应用,以实现功能的解耦及可扩展和可重用。

  • 应用创建:命令如下
python manage.py startapp myApp

    应用创建完毕后,将会在项目目录下生成一个/myApp/文件夹,即pythoh包。

  • 文件关系:一个应用模块对应项目根目录下的一个python包,开发者在其中的创建的文件可按照框架的MVT理念划分为模型文件(按照惯例命名为models.py),视图文件(按照惯例命名为views.py)和模板文件(即html文件,不同应用的模板文件统一放在项目文件夹下的/templates/文件夹,可按照应用再划分文件夹),以及给出url匹配规则及与视图的对应关系的文件(按照惯例命名为urls.py)。用户除了请求url时的方式可分为GET,POST,DELETE等,通过GET方式发起的HTML请求和对应的处理放在urls.py及views.py中,其响应为HTML内容,而通过POST或DELETE等方式发起的请求,通常由页面表单或其它有数据交互元素的点击触发,其目的通常是数据的增删改,返回的是Json格式的数据,因此其对应的请求和处理放在api_urls.py及api_view.py中。这三种文件间的交互关系如下图所示
    应用包文件关系图
  • models.py:该文件中定义了与数据库中的表一一映射的模型类。
  • urls.py/api_urls.py:该文件中定义了url的可匹配项及其对应的视图函数。
  • views.py/api_views.py:对指定url的http请求做出响应的逻辑过程。
  • HTML文件:htttp响应的文件。该文件中可包括HTML页面设计语言,css页面样式,以及JS,JQuery,vue等定义页面交互功能的代码。

了解了应用中需要开发的不同功能的文件及其相互关系后,下面将分别叙述本文所搭网站的用户登陆,图片分享,视频分享,留言这四种应用的具体功能实现。

2.2.1 用户登陆

用户的注册和登陆是本网站设计过程中最先需要考虑的一环,所有内容浏览,资源上传等其它操作都需要以已注册用户的身份进行,本依据用户身份划定操作权限。下面将详述实现用户注册和登陆的核心过程

  • 用户注册:下面将讲解用户注册时从在网页上填写及提交信息,注册成功则返回登陆页面,注册不成功则报错这一过程中,从前端发起请求,到后端处理,再到返回前端页面的核心代码。
    从前端——用户注册页面开始,在HTML文件signup.html中,输入框的表单如下
<form action="signin.html">
	{% verbatim myblock %}
	<div class="form-group">
		<label for="signin_form">账号 <span style="color:red"> {
  {account_err}}</span></label>
	    <input type="email" class="form-control" id="username" placeholder="账号" required="required">
	</div><!--/.form-group -->
	<div class="form-group">
		<label for="signin_form">邮箱{
  {email_err}}</label>
	    <input type="email" class
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值