在线相册管理
步骤
注意:运行代码要确保系统安装了MySQLdb驱动
创建项目
cmd终端运行以下命令,创建一个名为MyPhoto的项目
django-admin startproject MyPhoto
切换到MyPhoto目录下
cd MyPhoto
运行目录下的manage.py文件,创建Photoapp
python manage.py startapp Photoapp
并在MyPhoto目录下创建static和templates文件夹;然后在static文件夹创建pics文件夹,templates文件夹创建Photoapp文件夹(注意:与Photoapp同目录哦。)
配置settings文件
打开MyPhoto/settings.py文件进行配置
from pathlib import Path
import os
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'du78ncc8w!1=(3b2+ob)*)1_w0lrk!d@#yc=3^hcq6#5y8-p6j'
DEBUG = True
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Photoapp'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'Myphoto.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join('templates')],
'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',
],
},
},
]
WSGI_APPLICATION = 'Myphoto.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Photo',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':3306
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
构建模型
from django.db import models
from datetime import datetime
class Photo(models.Model):
id=models.AutoField(primary_key=True,)
name=models.CharField(max_length=200)
img_src=models.ImageField(upload_to='./static/pics/')
addtime=models.DateTimeField(default=datetime.now)
def __str__(self):
return '%s:%s'%(self.name,self.addtime)
class Meta:
db_table="myphoto"
接着,打开cmd,j进行文件迁移,自动在名为Photo的数据库创建一个名为myphoto的数据表
python manage.py migrate
python manage.py makemigrations
创建templates目录,创建静态页面
在templates目录下创建一个Photoapp文件夹,分别创建 index.html, edit.html, info.html, upload.html, menu.html
menu.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>在线相册信息管理</title>
<style type="text/css">
</style>
</head>
<body>
<center>
<h1>在线相册信息管理</h1>
<a href="{% url 'user' %}">浏览相册信息</a>
<a href="{% url 'upload' %}">添加相册信息</a>
<hr/>
</center>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>在线相册信息管理</title>
<style type="text/css">
img{
width: 75px;
height: 75px;
}
</style>
<script>
//自定义执行信息删除提示判断,参数uu是成功的删除url地址
function doDel(uu){
if(confirm("确定要删除吗?")){
//网页跳转
window.location=uu;
}
}
</script>
</head>
<body>
{% include 'Photoapp/menu.html' %}
<center>
<table cellspacing="0" border="1px" width="800px">
<tr>
<th>id号</th>
<th>标题</th>
<th>添加时间</th>
<th>图片</th>
<th>操作</th>
</tr>
{% for photo in photolist %}
<tr>
<td>{{photo.id}}</td>
<td>{{photo.name}}</td>
<td>{{photo.addtime|date:'Y-m-d H:i:s'}}</td>
<td><img src="{{photo.img_src}}"/></td>
<td>
<a href="{% url 'editusers' photo.id %}">编辑</a>
<a href="javascript:doDel('{% url 'delusers' photo.id %}');">删除</a>
</td>
</tr>
{% endfor %}
</table>
</center>
</body>
</html>
edit.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>用户信息管理</title>
</head>
<body>
<center>
{% include "Photoapp/menu.html" %}
<h3>修改用户信息</h3>
<form action="{% url 'updateusers' %}" method="post">
<input type="hidden" name="id" value="{{photo.id}}"/>
{% csrf_token %}
<table width="280" border="0">
<tr>
<td>名称</td>
<td><input type="text" name="name" value="{{photo.name}}"/></td>
</tr>
<!-- <tr>-->
<!-- <td>图片</td>-->
<!-- <td><input type="text" name="age" value="{{photo.img_src}}"/></td>-->
<!-- </tr>-->
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
info.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
{% include 'Photoapp/menu.html' %}
<h3>{{info}}</h3>
</center>
</body>
</html>
upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传图片</title>
</head>
<body>
{% include 'Photoapp/menu.html' %}
<center>
<form action="{% url 'doupload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
图片名称:<input type="text" name="name"><br/>
上传文件:<input type="file" name="img"><br/>
<input type="submit" value="提交">
</form>
</center>
</body>
</html>
配置路由
MyPhoto/urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('Photoapp.urls'))
]
Photoapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.user,name='user'),
path('upload/',views.upload,name='upload'),
path('doupload/',views.doupload,name='doupload'),
path('user//del', views.delUsers, name="delusers"),
path('user//edit', views.editUsers, name="editusers"),
path('user/update/', views.updateUsers, name="updateusers"),
]
定义view文件
Photoapp/views.py
import datetime
from django.http import HttpResponse
from django.shortcuts import render
from Photoapp.models import Photo
def index(request):
return render(request,'Photoapp/index.html')
def user(request):
list=Photo.objects.all()
context={'photolist':list}
return render(request,'Photoapp/index.html',context)
def upload(request):
return render(request,'Photoapp/upload.html')
def doupload(request):
i=1
myfile_name=request.POST.get("name",None)
myfile = request.FILES.get("img",None)
if not myfile:
return HttpResponse("没有上传的文件信息")
Photo.objects.create(name=myfile_name,img_src=myfile)
filename='LX'+str(i)+"."+myfile.name.split('.').pop()
destination = open("./static/pics/"+filename,"wb+")
for chunk in myfile.chunks():
destination.write(chunk)
destination.close()
context = {'info': '图片上传成功!'}
return render(request,"Photoapp/info.html",context)
i=i+1
def delUsers(request,uid):
try:
ob = Photo.objects.get(pk=uid)
ob.delete()
context = {'info':'删除成功!'}
except:
context = {'info':'删除失败!'}
return render(request,"Photoapp/info.html",context)
def editUsers(request,uid):
try:
ob = Photo.objects.get(pk=uid)
context = {'photo':ob}
return render(request,"Photoapp/edit.html",context)
except:
context = {'info':'没有找到要修改的信息!'}
return render(request,"Photoapp/info.html",context)
def updateUsers(request):
try:
ob = Photo.objects.get(id= request.POST['id'])
ob.name = request.POST['name']
ob.save()
context = {'info':'修改成功!'}
return render(request,"Photoapp/info.html",context)
except:
context = {'info':'修改失败!'}
return render(request,"Photoapp/info.html",context)
启动项目
MyPhoto文件夹shift+鼠标右键打开PowerShell
打开浏览器,输入http://localhost:8000/进入主页
注意:涉及文件以及路由过多,需理清思路,不建议一次性复制,不然出bug都不知道在哪里改,文件目录名字一定要正确
; gitee源码地址:
https://gitee.com/lx-2022/online-photo
Original: https://blog.csdn.net/qq_47828130/article/details/121775389
Author: 李现分现
Title: Django入门,制作在线相册管理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737009/
转载文章受原作者版权保护。转载请注明原作者出处!