-
{% for item in sheepslist %}
-
{{item.name}}
{% endfor %}
此次项目是一个very简陋的Python web项目,是一个青青草原小羊展示系统,感兴趣的话就看下去叭!项目展示如下:
用户注册:
登录页面:
首页:
详情页(以懒羊羊为例):
修改密码:
表单页面:
首先创建一个Django项目,不会的可以看我另外一篇社区版PyCharm安装并创建Django项目,不过我后面用vscode进行编辑运行的。但是基本的创建项目的指令都是一样的。
这里我创建一个名为ypro的项目,在其中创建一个sheep应用。
项目结构如下:
打开项目所在文件夹,打开文件夹在与sheep应用同级处新建两个文件夹,一个static文件夹用于存放图片和css文件,templates文件用于后期存放模板,即html文件。
项目创建完成后就需要在settings.py中对项目进行一系列的配置,详情如下:
首先打开settings.py,在其中找到INSTALLED_APPS并把刚刚创建好的应用添加上去。
找到TEMPLATES指定存放模板的templates目录
与此同时还需要配置存放项目所用的静态文件的static目录(注:这里的static文件夹和templates文件夹后期都会用到,可以先配置好)
最后配置数据库,如果选择Django默认数据库的话就不用这一步了,但是我使用的是MySQL数据库。数据库配置如下所示:
然后我们就可以新建模型了!
打开models.py,在其中新建模型类,内容如下:
from django.db import models
class Sheeps(models.Model):
name = models.CharField(max_length=100, verbose_name=u"名称")
degree = models.CharField(max_length=100, verbose_name=u"喜爱程度")
sheepdesc = models.CharField(max_length=100, verbose_name=u"角色描述")
weight = models.CharField(max_length=100, verbose_name=u"单位")
imgurl=models.ImageField(upload_to="static/upload/%Y/%m", verbose_name=u"角色图片", max_length=100)
class Meta:
verbose_name = u"角色"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
利用python manage.py makemigrations生成迁移文件后利用python manage.py migrate执行迁移文件,这个时候数据库sheep中就会新建很多表,如下图所示:
找到sheep_sheeps,在其中添加最终要在前台展示的羊羊的相关信息,内容如下:
这里唯一需要注意的是imgurl中图片路径的写法。在static中新建了一个upload文件夹用于存储数据库图片。
在views.py中书写视图,其内容如下:
from django.shortcuts import render
from django.core.mail import send_mail
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import login,logout,authenticate
from random import Random
from django.views import View
from sheep.forms import SheepsForm
from sheep.models import Sheeps
#首页
def index(request):
allsheeps = Sheeps.objects.all() # 动态读取
return render(request, 'list.html', {
"sheepslist": allsheeps,
})
#详情
class detailview(View):
def get(self, request, goods_id):
sheeps = Sheeps.objects.get(id=int(goods_id))
return render(request, "detail.html", {
"sheeps": sheeps,
})
#登录
def loginView(request):
if request.method=="POST":
username=request.POST.get("username")
password=request.POST.get("password")
if User.objects.filter(username=username):
user=authenticate(username=username,password=password)
if user:
if user.is_active:
login(request,user)
return render(request,"list.html")
else:
msg="用户名密码错误"
else:
msg="用户名不存在"
return render(request,"login.html",locals())
#表单
def get_sheeps(request):
sheeps=Sheeps.objects.all()
SheepsForm(sheeps)
return render(request, 'form.html', {"sheeps":sheeps,"form":SheepsForm})
#注册
def regView(request):
if request.method=="POST":
username=request.POST.get("username")
password=request.POST.get("password")
email=request.POST.get("email")
if User.objects.filter(username=username):
msg="用户名已存在"
else:
user=User.objects._create_user(username=username,password=password,email=email)
user.save()
msg="注册成功"
return render(request,"register.html",locals())
#退出登录
def logoutView(request):
logout(request)
return render(request,"login.html")
#修改密码
def updateView(request):
if request.method=="POST":
username=request.POST.get("name")
password=request.POST.get("password")
newpassword=request.POST.get("newpassword")
#先验证用户名是否正确
if User.objects.filter(username=username):
#验证旧密码是否正确
user=authenticate(username=username,password=password)
user.set_password(newpassword)
user.save()
msg="密码修改成功"
else:
msg="用户不存在"
return render(request,"update.html",locals())
在urls.py中配置路由,其内容如下:
from django.contrib import admin
from django.urls import path, re_path
from sheep import views
from sheep.views import loginView, regView, logoutView,updateView
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', loginView),#登录
path('index/', views.index),
re_path(r'^detail/(?P\d+)/$', views.detailview.as_view(), name="detail"),
path('form/',views.get_sheeps),
path('reg/', regView),#注册
path('logout/', logoutView),#退出登录
path('update/', updateView),#修改密码
]
在templates文件夹中新建html文件,分别如下:
login.html
用户登录
list.html
商品列表
退出登录
{% for item in sheepslist %}
-
{{item.name}}
{% endfor %}
detail.html
商品详情
退出登录
register.html
用户注册
update.html
修改密码
admin后台管理,只需通过python manage.py createsuperuser来创建超级用户,随后在admin.py添加如下内容:
from django.contrib import admin
from sheep.models import Sheeps
class sheepsAdmin(admin.ModelAdmin):
list_display = ('name', 'degree','sheepdesc','weight')
list_editable = ('sheepdesc',)
search_fields = ('name',)
admin.site.register(Sheeps,sheepsAdmin) #将模型注册到admin后台中
将admin后台的文字设置为中文:
表单:
在应用下创建forms.py,其中内容如下:
from django.forms import ModelForm
from sheep.models import Sheeps
class SheepsForm(ModelForm):
class Meta:
model = Sheeps
fields = ['name', 'degree','sheepdesc','weight']
form.html
表单
退出登录
{% for item in sheeps %}
{% csrf_token %}
{% endfor %}
最后如果有需要项目css的可以关注我的公众号大太阳花花公主,在后台回复sheep即可。