当前位置: 首页 > wzjs >正文

php网站开发txtseo关键词推广方式

php网站开发txt,seo关键词推广方式,公司网站备案查询,网站公安备案必须在Django框架中&#xff0c;有两种定义表单的方式。 在HTML中可使用<form>标签定义表单域&#xff0c;此表单域中再包含单选或多行文本框、密码框、单选按钮、复选按框、下拉选择框等元素。这种方式的特点是使用纯粹的HTML和CSS知识实现&#xff0c;学习的成本较低&#…

在Django框架中,有两种定义表单的方式。

  1. 在HTML中可使用<form>标签定义表单域,此表单域中再包含单选或多行文本框、密码框、单选按钮、复选按框、下拉选择框等元素。这种方式的特点是使用纯粹的HTML和CSS知识实现,学习的成本较低,更适用于对前端HTML比较擅长的同学。

  2. 在Python代码中通过Form类或其子类也可以定义表单。因表单类生成的表单不包含<form>标签,使用时须将其嵌入到<form>标签中。这种方式的特点是可复用表单类或表单类的部分属性,这种方式适用于喜欢写Python代码的同学。当然,这种实现方式同样可以使用CSS美化、装修。

本次学习的重点是表单类的实现方式。

7.1 继承Form类的表单

准备工作:创建Django项目chapter07,并创建应用app01,在此应用下创建forms.py模块,用于定义所有的表单。

第一步:在forms.py中定义表单类LoginForm类,

#forms.py
from django import forms
​
class LoginForm(forms.Form):username = forms.CharField(max_length=20, min_length=2, required=True,label='用户名',error_messages={'min_length': '用户名不能小于2个字符'})password = forms.CharField(widget=forms.PasswordInput, label='密码')
第二步:定义视图函数
from django.http import HttpResponse
from django.shortcuts import render
​
from app01.forms import LoginForm
​
def login(request):# Post请求if request.method == 'POST':# 根据接收到的数据创建表单类对象loginForm = LoginForm(request.POST)if loginForm.is_valid():# 取数据的方法username = loginForm.cleaned_data.get('username')password = loginForm.cleaned_data.get('password')return HttpResponse(f'{username}--{password}')else:print(loginForm.errors)return HttpResponse('表单验证失败')# get 请求elif request.method == 'GET':# 创建空表单loginForm = LoginForm()return render(request, 'index.html', {'loginForm': loginForm})

第三步:定义路由,项目urls.py中

from django.urls import path
​
from app01.views import login
​
urlpatterns = [path('login/', login),
]

第四步:在templates中创建index.html模板

<body>
<h2>表单示例</h2>
<form action="" method="post">{% csrf_token %}{{ loginForm }}<input type="submit" value="提交">
</form>
</body>

7.2 继承ModelForm类的表单

为了方便对比,此处先用HTML表单实现,再改造为ModelForm表单。

7.2.1 HTML表单实现方式

在7.1项目基础上创建goods应用

python manage.py startapp goods

项目底下创建templates文件夹,在文件夹里创建goods.html文件

<html lang="en">
<head><meta charset="UTF-8"><title>商品列表</title>
</head>
<body>
<div><table id="myTable" cellpadding="1" cellspacing="0" border="1"style="width:100%;max-width: 100%;margin-bottom: 20px "><caption align="top" style="font-size: 26px">商品列表</caption><thead><tr><th>序号</th><th>名字</th><th>价格</th><th>库存</th><th>销量</th><th>管理</th></tr></thead><tbody>{% for row in goods %}<tr align="center"><td>{{ forloop.counter }}</td><td>{{ row.name }}</td><td>{{ row.price }}</td><td>{{ row.stock }}</td><td>{{ row.sales }}</td><td><a href="goods/{{ row.id }}">删除</a></td></tr>{% endfor %}</tbody></table>
</div>
<div>{#  表单一:添加  #}<form method="post" action="/info/" cellpadding="1" cellspacing="0"border="1">{% csrf_token %}<input type="submit" value="添加">商品:<input type="text" name="good_name">价格:<input type="text" name="good_price">库存:<input type="text" name="good_stock">销量:<input type="text" name="good_sales"></form>
</div>
<div>{#                            表单二:修改                              #}<form method="post" action="/goods/" cellpadding="1" cellspacing="0"border="1">{% csrf_token %}<input type="submit" value="修改">序号:<input type="text" name="good_num">商品:<input type="text" name="good_name">价格:<input type="text" name="good_price">库存:<input type="text" name="good_stock">销量:<input type="text" name="good_sales"></form>
</div>
</body>
</html>

goods应用下的models里定义goods模型

from django.db import modelsclass Goods(models.Model):"""商品SKU"""# 可以利用null和blank属性使部分字段留空create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")name = models.CharField(max_length=50, verbose_name='名字')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格')stock = models.IntegerField(default=0, verbose_name='库存')sales = models.IntegerField(default=0, verbose_name='销量')class Meta:db_table = 'tb_goods'verbose_name = '商品'verbose_name_plural = verbose_namedef __str__(self):return f'name: {self.name}, price: {self.price}, stock: {self.stock}, sales: {self.sales}'

生成迁移文件并执行迁移

python manage.py makemigrations
python manage.py migrate

在goods应用下的views.py文件里定义视图类,展示商品和删除商品的逻辑。然后分别在类GoodView和UpdateDestoryGood中实现商品展示和删除的功能。

from django.shortcuts import render, redirect, reverse
from django.views import View
from django import http
from .models import Goods
​
​
class GoodView(View):"""商品视图类"""
​def get(self, request):"""展示商品"""goods = Goods.objects.all()context = {'goods': goods,}return render(request, 'goods.html', context)
​def post(self, request):"""添加商品"""good = Goods()try:good.name = request.POST.get('good_name')good.price = request.POST.get('good_price')good.stock = request.POST.get('good_stock')good.sales = request.POST.get('good_sales')good.save()# return redirect('goods/info/')  # 快捷方式return redirect(reverse('goods:info'))except Exception as e:print(e)return http.HttpResponseForbidden('数据错误')
​
​
class UpdateDestoryGood(View):"""编辑或删除商品"""
​def get(self, request, gid):"""删除商品数据"""try:good = Goods.objects.get(id=gid)good.delete()except Exception as e:print(e)return http.HttpResponseForbidden('删除失败')return redirect(reverse('goods:info'))
​def post(self, request, gid=0):"""编辑商品"""num = request.POST.get('good_num')print(type(num))one_goods = Goods.objects.all()[int(num) - 1]print(one_goods)one_goods.name = request.POST.get('good_name')one_goods.price = request.POST.get('good_price')one_goods.stock = request.POST.get('good_stock')one_goods.sales = request.POST.get('good_sales')# one_goods.save()Goods.objects.filter(id=one_goods.id).update(price=one_goods.price, stock=one_goods.stock,sales=one_goods.sales, name=one_goods.name)return redirect(reverse('goods:info'))

配置根路由urls.py

from django.urls import path, includefrom app01.views import loginurlpatterns = [path('login/', login),path('', include('goods.urls')),
]

(2)goods/urls.py

from django.urls import path, re_pathfrom goods import views
app_name = 'goods'
urlpatterns = [# 展示商品数据、添加商品path('info/', views.GoodView.as_view(), name='info'),# 修改删除商品re_path('goods/(\d*)', views.UpdateDestoryGood.as_view()),
]

利用数据文件goods.sql插入商品数据,

INSERT INTO tb_goods (create_time, update_time, name, price, stock, sales) VALUES
('2019-09-11 17:28:21.804713', '2019-09-25 11:09:04.532866', 'Apple MacBook Pro 13.3英寸笔记本 银色', 11388, 5, 5),
('2019-09-12 06:53:54.575306', '2019-09-23 11:44:03.825103', 'Apple MacBook Pro 13.3英寸笔记本 深灰色', 11398, 0, 1),
('2019-09-14 02:14:04.599169', '2019-09-20 02:28:13.579856', 'Apple iPhone 11 Pro 256GB 香芋紫', 6499, 6, 4),
('2019-09-14 02:20:33.355996', '2019-09-14 17:27:12.736139', 'Apple iPhone 11 Plus 256GB 金色', 7988, 8, 2),
('2019-09-14 02:45:23.341909', '2019-09-14 17:27:17.181609', 'Apple iPhone 11 Plus 64GB 深空灰色', 6688, 10, 0),
('2019-09-14 02:49:40.912682', '2019-09-25 11:09:35.936530', 'Apple iPhone 11 Plus 256GB 深空灰色', 7988, 0, 5),
('2019-09-14 02:55:11.172604', '2019-09-14 17:27:28.772353', 'Apple iPhone 11 Plus 64GB 银色', 6688, 3, 0),
('2019-09-14 02:56:17.331169', '2019-09-14 17:27:34.536772', 'Apple iPhone 11 Plus 256GB 银色', 7988, 9, 1),
('2019-09-14 03:09:00.909709', '2019-09-14 17:27:40.624770', '华为 HUAWEI Pro 30 6GB+64GB 钻雕金', 3388, 4, 0),
( '2019-09-14 03:13:40.226704', '2019-09-25 11:06:55.087206', '华为 HUAWEI Pro 30 6GB+128GB 钻雕金', 3788, 3, 0),
( '2019-09-14 03:16:27.620102', '2019-09-25 10:56:51.267674', '华为 HUAWEI Pro 30 6GB+128GB 钻雕蓝', 3788, 5, 0),
( '2019-09-14 03:17:25.671905', '2019-09-14 17:28:06.649098', '华为 HUAWEI Pro 30 6GB+64GB 钻雕蓝', 3388, 5, 0),
( '2019-09-14 03:18:04.588296', '2019-09-14 17:28:23.886231', '华为 HUAWEI Pro 30 6GB+64GB 玫瑰金', 3388, 5, 0),
( '2019-09-14 03:19:03.691772', '2019-09-25 11:10:51.316291', '华为 HUAWEI Pro 30 6GB+128GB 玫瑰金', 3788, 0, 4),
( '2019-09-20 02:27:04.955931', '2019-09-20 02:27:04.956931', 'Apple iPhone 11 Pro 256GB 香芋紫', 6499, 6, 3);

7.2.2 使用表单类

1、在goods应用中创建forms.py,在其中定义表单类,代码如下:

from django import forms
from django.forms import ModelForm
from django.forms import formset_factory
from . import models
from .models import Goods
​
​
class GoodForm(ModelForm):class Meta:model = Goodsfields = ['name', 'price', 'sales', 'stock']

2、goods.html修改为

<html lang="en">
<head><meta charset="UTF-8"><title>商品列表</title>
</head>
<body>
<div><table id="myTable" cellpadding="1" cellspacing="0" border="1"style="width:100%;max-width: 100%;margin-bottom: 20px "><caption align="top" style="font-size: 26px">商品列表</caption><thead><tr><th>序号</th><th>名字</th><th>价格</th><th>库存</th><th>销量</th><th>管理</th></tr></thead><tbody>{% for row in goods %}<tr align="center"><td>{{ forloop.counter }}</td><td>{{ row.name }}</td><td>{{ row.price }}</td><td>{{ row.stock }}</td><td>{{ row.sales }}</td><td><a href="goods/{{ row.id }}">删除</a></td></tr>{% endfor %}</tbody></table>
</div>
<div>{#  表单一:添加  #}<form method="post" action="/info/" cellpadding="1" cellspacing="0"border="1">{% csrf_token %}<input type="submit" value="添加">{#        商品:<input type="text" name="good_name">#}{#        价格:<input type="text" name="good_price">#}{#        库存:<input type="text" name="good_stock">#}{#        销量:<input type="text" name="good_sales">#}
​{{ form }}{#        {{ form.as_table }}#}</form>
</div>
<div>{#                            表单二:修改                              #}<form method="post" action="/goods/" cellpadding="1" cellspacing="0"border="1">{% csrf_token %}<input type="submit" value="修改">{#        序号:<input type="text" name="good_num">#}{#        商品:<input type="text" name="good_name">#}{#        价格:<input type="text" name="good_price">#}{#        库存:<input type="text" name="good_stock">#}{#        销量:<input type="text" name="good_sales">#}序号: <input type="text" name="good_num">{{ form }}{#        {{ form.as_table }}#}</form>
</div>
</body>
</html>

goods应用下视图文件修改

from django.shortcuts import render, redirect, reverse
from django.views import View
from django import http
​
from app01.forms import GoodForm
from .models import Goods
​
​
class GoodView(View):"""商品视图类"""
​def get(self, request):"""展示商品"""# goods = Goods.objects.all()# context = {#     'goods': goods,# }# return render(request, 'goods.html', context)# 使用表单goods = Goods.objects.all()form = GoodForm()context = {'goods': goods,'form': form,}return render(request, 'goods.html', context)def post(self, request):"""添加商品"""# good = Goods()# try:#     good.name = request.POST.get('good_name')#     good.price = request.POST.get('good_price')#     good.stock = request.POST.get('good_stock')#     good.sales = request.POST.get('good_sales')#     good.save()#     # return redirect('goods/info/')  # 快捷方式#     return redirect(reverse('goods:info'))# except Exception as e:#     print(e)#     return http.HttpResponseForbidden('数据错误')# 使用表单good = Goods()# 使用已提交的数据实例化NameFormform = GoodForm(request.POST)# 判断表单是否已验证,获取已验证的数据if form.is_valid():good_data = form.cleaned_datagood.name = good_data['name']good.price = good_data['price']good.stock = good_data['stock']good.sales = good_data['sales']try:good.save()except:return http.HttpResponseForbidden('数据错误')return redirect(reverse('goods:info'))
​
class UpdateDestoryGood(View):"""编辑或删除商品"""
​def get(self, request, gid):"""删除商品数据"""try:good = Goods.objects.get(id=gid)good.delete()except Exception as e:print(e)return http.HttpResponseForbidden('删除失败')return redirect(reverse('goods:info'))
​def post(self, request, gid=0):"""编辑商品"""# num = request.POST.get('good_num')# print(type(num))# one_goods = Goods.objects.all()[int(num) - 1]# print(one_goods)# one_goods.name = request.POST.get('good_name')# one_goods.price = request.POST.get('good_price')# one_goods.stock = request.POST.get('good_stock')# one_goods.sales = request.POST.get('good_sales')# # one_goods.save()# Goods.objects.filter(id=one_goods.id).update(price=one_goods.price, stock=one_goods.stock,#                                              sales=one_goods.sales, name=one_goods.name)# return redirect(reverse('goods:info'))# 使用表单goods = Goods.objects.all()count = goods.count()form = GoodForm(request.POST)good_num = request.POST.get('good_num')if form.is_valid():good_data = form.cleaned_datafor i in range(1, count + 1):if i == int(good_num):good = goods[i - 1]good.name = good_data['name']good.price = good_data['price']good.stock = good_data['stock']good.sales = good_data['sales']try:good.save()breakexcept Exception as e:return http.HttpResponseForbidden('编辑失败')return redirect(reverse('goods:info'))

http://www.dtcms.com/wzjs/320492.html

相关文章:

  • wordpress首页弹窗杭州网站优化多少钱
  • 导购网站如何做免费推广2022最新版百度
  • 公众号江苏建设信息网站如何制作自己的链接
  • 建立网站容量天津seo网站排名优化公司
  • 一个网站需要怎么做南宁百度seo排名价格
  • 哪个网站可以做今日头条排版百度seo正规优化
  • 松江网站建设360搜索引擎首页
  • 怎么做网站安全检测本网站三天换一次域名
  • 做网站用什么后台网络营销过程步骤
  • 互联网公司排名前1000个百度seo引流怎么做
  • 网站程序的设计费用亚马逊关键词搜索器
  • 建网站盈利的几种方式个人网站源码免费下载
  • 大型网站建设济南兴田德润团队怎么样百度投诉电话24小时
  • 微软哪个软件做网站叶涛网站推广优化
  • 建立网络平台需要什么武汉seo公司排名
  • 红河蒙自网站开发百度百度一下首页
  • 工信部查询网站备案英雄联盟韩国
  • 美仑美家具的网站谁做的推广方案模板
  • 河北建筑培训网实名认证百度刷排名优化软件
  • 网站建设竞争对手分析长沙百度网站优化
  • 苏州哪家公司做网站网页制作代码html制作一个网页
  • 孝义网站开发公司自媒体怎么做
  • 云南网站建设首选公司2024小学生时事新闻十条
  • 做家教需要什么哪个网站的会员外链购买平台
  • 热 综合-网站正在建设中-手机版品牌如何推广
  • wordpress the postseo外链自动群发工具
  • 建程网信息可靠吗百度seo优化是做什么的
  • 做网站的视频台州关键词首页优化
  • 深圳网站建设专业公司广告关键词
  • thinkphp 网站源码建立网站一般要多少钱