简单的Django项目

1,项目展示

此次项目是一个very简陋的Python web项目,是一个青青草原小羊展示系统,感兴趣的话就看下去叭!项目展示如下:

用户注册:

简单的Django项目_第1张图片

登录页面:

简单的Django项目_第2张图片

首页:

简单的Django项目_第3张图片

详情页(以懒羊羊为例):

简单的Django项目_第4张图片

修改密码:

 表单页面:

简单的Django项目_第5张图片 2,项目代码

首先创建一个Django项目,不会的可以看我另外一篇社区版PyCharm安装并创建Django项目,不过我后面用vscode进行编辑运行的。但是基本的创建项目的指令都是一样的。

这里我创建一个名为ypro的项目,在其中创建一个sheep应用。

项目结构如下:

简单的Django项目_第6张图片

打开项目所在文件夹,打开文件夹在与sheep应用同级处新建两个文件夹,一个static文件夹用于存放图片和css文件,templates文件用于后期存放模板,即html文件。

项目创建完成后就需要在settings.py中对项目进行一系列的配置,详情如下:

首先打开settings.py,在其中找到INSTALLED_APPS并把刚刚创建好的应用添加上去。

简单的Django项目_第7张图片

 找到TEMPLATES指定存放模板的templates目录

简单的Django项目_第8张图片

与此同时还需要配置存放项目所用的静态文件的static目录(注:这里的static文件夹和templates文件夹后期都会用到,可以先配置好)

简单的Django项目_第9张图片

最后配置数据库,如果选择Django默认数据库的话就不用这一步了,但是我使用的是MySQL数据库。数据库配置如下所示:

简单的Django项目_第10张图片

然后我们就可以新建模型了!

打开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中就会新建很多表,如下图所示:

简单的Django项目_第11张图片

找到sheep_sheeps,在其中添加最终要在前台展示的羊羊的相关信息,内容如下:

 简单的Django项目_第12张图片

 这里唯一需要注意的是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




    
    
    
    用户登录


    
    
{%csrf_token%} 用户名:
密 码:
{{ msg }}

list.html




    
    商品列表
    
    


    
    退出登录
    
    {% for item in sheepslist %}
  • {{item.name}}

    ¥{{item.degree}} {{item.degree}}/{{item.weight}}g
  • {% endfor %}

detail.html




	
	商品详情
	
	


	
	退出登录
	

{{sheeps.name}}

¥{{sheeps.degree}} 重量:{{sheeps.weight}}g
总价:{{sheeps.degree}}

新人推荐

  • 角色介绍
商品详情:
{{sheeps.sheepdesc}}

register.html





    
    
    
    用户注册


    
    
{%csrf_token%} 用户名:
密 码:
{{ msg }}

update.html




    
    
    
    修改密码


    
    
{%csrf_token%} 用户名:
密码:
新密码:
{{ msg }}

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后台的文字设置为中文:

简单的Django项目_第13张图片  

表单:

在应用下创建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即可。

    你可能感兴趣的:(web,Python,django,python)