不分离的python和html操作

创建django项目

在小黑框

django-admin startproject 项目名

把项目拖到python文件中

创建子应用

python manage.py startapp 子应用名

配置setting

注册子应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]
注册模板页面
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'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',
            ],
        },
    },
]
数据库链接
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST':'localhost',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'123456789',
        'NAME':'day7hdk2',
    }
}
语言
LANGUAGE_CODE = 'zh-Hans'
时区
TIME_ZONE = 'Asia/Shanghai'

python中安装数据库 init

import pymysql
pymysql.install_as_MySQLdb()

创建模型类

from django.db import models

# Create your models here.
# 5.	新建一个干净项目,项目名为day7+姓名首拼+2
# 6.	编写种类Kind模型类,由种类名称kind_name组成,并自己添加3条数据
# 7.	编写商品Good模型类,商品名good_name、单价price、数量num、种类kind(外键),并自己添加测试数据
class Kind(models.Model):
    kind_name=models.CharField(max_length=10,verbose_name='种类名称')
    class Meta:
        verbose_name='种类表'
        verbose_name_plural=verbose_name
        db_table='kind'
    def __str__(self):
        return self.kind_name
class Good(models.Model):
    good_name=models.CharField(max_length=10,verbose_name='商品名')
    price=models.IntegerField(default=0,verbose_name='单价')
    num=models.IntegerField(default=0,verbose_name='数量')
    kind=models.ForeignKey(to=Kind,on_delete=models.CASCADE,verbose_name='种类')
    class Meta:
        verbose_name='商品表'
        verbose_name_plural=verbose_name
        db_table='good'
    def __str__(self):
        return self.good_name

在admin中注册模型类

from django.contrib import admin
from myapp.models import Kind
from myapp.models import Good
# Register your models here.
admin.site.register(Kind)
admin.site.register(Good)

迁移文件

python manage.py makemigrations
python manage.py migrate

创建超级用户

python manage.py createsuperuser

在子应用中新建urls

from django.contrib import admin
from django.urls import path,include
from myapp import urls
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include(urls))
]
from django.urls import path
from myapp import views
urlpatterns = [
    path('kind/',views.kind.as_view()),
    path('good/<int:id>',views.good.as_view()),
    path('add/',views.add.as_view()),
    path('del/<int:id>/',views.delete.as_view()),
    path('select/',views.select.as_view()),
    path('update/<int:id>',views.update.as_view()),
]

然后在View中输出

from django.shortcuts import render,redirect
from django.views import View
from django.http import HttpResponse
from myapp.models import Kind
from myapp.models import Good
# Create your views here.
# 主页面功能:
# 1.展示所有的种类信息
class kind(View):
    def get(self,request):
        data=Kind.objects.all()
        return render(request,'kind.html',{'kind':data})
# 2.可以搜索商品信息
class select(View):
    def get(self,request):
        name=request.GET.get('good_name')
        try:
            data=Good.objects.get(good_name__contains=name)
        except Exception as e:
            print(e)
            return HttpResponse("数据查询失败")
        return HttpResponse(f"{data.good_name},{data.price},{data.num},{data.kind}")

# 3.可以新增商品信息
class add(View):
    def post(self,request):
        good_name=request.POST.get('good_name')
        price = request.POST.get('price')
        num = request.POST.get('num')
        kind = request.POST.get('kind')
        try:
            Good.objects.create(
                good_name=good_name,
                price=price,
                num=num,
                # 注意这是外键需要用id
                kind_id=kind,
            )
        except Exception as e:
            print(e)
            return HttpResponse("数据添加失败")
        return redirect('/kind/')
# 4.点击种类名可以进入到指定种类下,展示对应种类的商品信息,并按照价格排序
class good(View):
    def get(self,request,id):
        data=Good.objects.filter(kind_id=id)
        return render(request,'good.html',{'good':data})
# 商品信息页面功能:
# 1. 商品信息的修改
class update(View):
    def get(self,request,id):
        data=Good.objects.get(id=id)
        return render(request,'index.html',{'goods':data})
    def post(self, request, id):
        good_name = request.POST.get('good_name')
        price = request.POST.get('price')
        num = request.POST.get('num')
        kind = request.POST.get('kind')
        try:
            Good.objects.filter(id=id).update(
                good_name=good_name,
                price=price,
                num=num,
                kind_id=kind,
            )
        except Exception as e:
            print(e)
            return HttpResponse("修改失败")
        return redirect('/kind/')
# 2. 商品信息的删除
class delete(View):
    def get(self,request,id):
        Good.objects.filter(id=id).delete()
        return redirect('/kind/')

view中涉及的good.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <th>编号</th>
        <th>商品名</th>
        <th>单价</th>
        <th>数量</th>
        <th>种类</th>
        <th>操作</th>
    </tr>
    {% for foo in good %}
    <tr>
        <th>{{ foo.id }}</th>
        <th>{{ foo.good_name }}</th>
        <th>{{ foo.price }}</th>
        <th>{{ foo.num }}</th>
        <th>{{ foo.kind }}</th>
        <th>
            <a href="/del/{{ foo.id }}/" methods="get">
                删除
            </a>
            <a href="/update/{{ foo.id }}/" methods="get">
                修改
            </a>
        </th>
    </tr>
    {% endfor %}
</table>
<form action="/add/" method="post">
    商品:<input type="text" name="good_name"><br>
    单价:<input type="text" name="price"><br>
    数量:<input type="text" name="num"><br>
    种类:<input type="text" name="kind"><br>
    <input type="submit" value="添加"><br>
</form>
<form action="/select/" method="get">
    商品名称:<input type="text" name="good_name">
    <input type="submit" value="查询">
</form>
</body>
</html>

view中涉及的kind.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <th>编号</th>
        <th>种类名称</th>
    </tr>
    {% for foo in kind %}
        <tr>
        <th>{{ foo.id }}</th>
        <th>
            <a href="/good/{{ foo.id }}">{{ foo.kind_name }}</a>
        </th>
        </tr>
    {% endfor %}

</table>
</body>
</html>

view中涉及的index.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post">
    编号:<input type="text" name="id" value="goods.id">
    商品名:<input type="text" name="good_name" value="goods.good_name">
    单价:<input type="text" name="price" value="goods.price">
    数量:<input type="text" name="num" value="goods.num">
    种类:<input type="text" name="kind_id" value="goods.kind_id">
</form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值