背景:
demo采用的是前后端不分离的操作,用Bootstrap作为前段页面框架使用
1.先说模板之间的继承(针对HTML来讲)
父模板中编写好公共代码块,例如一个网站的导航和footer部分
在内容部分注明
{%block content%}
{%end block}
ps: 其中conten为名字可以自定义,后面继承时记得保持一致即可
2.Django(url+view+HTML)
编写流程就是url+view+HTML 这个顺序看个人习惯,没有前后之分。
先说下view部分,也就是我们函数业务逻辑处理部分(上代码)===普通选手
查全部
def userlist(request):
user_list=publish.objects.all().order_by('-id')
return render(request,'userlist.html',{"user_list":user_list})
改数据
def usereditor(request,nid):
if request.method=="GET":
row_objec=models.publish.objects.filter(id=nid).first()
return render(request,'usereditor.html',{"row_objec":row_objec})
name=request.POST.get("name")
city=request.POST.get("city")
models.publish.objects.filter(id=nid).update(name=name,city=city)
return redirect('../userlist/')
删除数据
def userdelete(request):
nid=request.GET.get('nid')
print(nid)
models.publish.objects.filter(id=nid).delete()
return redirect('../userlist/')
添加数据
def useradd(request):
if request.method=='GET':
return render(request,'useradd.html')
name=request.POST.get("name")
city=request.POST.get("city")
models.publish.objects.create(name=name,city=city)
return redirect('../userlist/')
进阶选手=借用form 和modleform(君子性非异也,善假于物也。)
借用form
# 通过form实现
class pulishform(Form):
name=forms.CharField(widget=forms.TextInput)
city=forms.CharField(widget=forms.TextInput)
def useraddform(request):
if request.method=="GET":
form=pulishform()
return render(request,'useraddform.html',{"form":form})
ps:return回去的数据最好写form 这里踩过坑 后面对数据处理总是有问题,还需要观察一下。
借用modelform
class pulishform1(forms.ModelForm):
class Meta:
model=models.publish
# fields=['name','city']
fields="__all__"
widgets={
'name':forms.TextInput(attrs={'class':'form-control'}),
'city':forms.TextInput(attrs={'class':'form-control'}),
}
# 这个还需要验证 我的是不能这样操作的
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for name, field in self.fields.__getitem__(i=0):
field.widget.attrs={"class":"form-control","placeholder":field.label}
#添加数据
def useraddmodleform(request):
if request.method=="GET":
form = pulishform1()
return render(request, 'useraddmodleform.html', {"form": form})
form=pulishform1(data=request.POST)
if form.is_valid():
form.save()
return redirect('../userlist/')
return render(request,'useraddmodleform.html',{"form":form})
#编辑
def usereditormodleform(request,nid):
if request.method=="GET":
row_object=models.publish.objects.filter(id=nid).first()
form=pulishform1(instance=row_object)
return render(request,'usereditormodleform.html',{"form":form})
row_object=models.publish.objects.filter(id=nid).first()
form=pulishform1(data=request.POST,instance=row_object)
if form.is_valid():
form.save()
return redirect('../../userlist/')
return render(request,'usereditormodleform.html',{"form":form})
整体备注一下:如果django项目安装了debug_tools记得关掉 Intercept redirects,否则在redirect时会出现302页面
其次就是里面的路径:因为我是使用了二级路由,所以在项目的路由上不方便调试。如果使用的二级路由在redirect时可以考虑用相对路径即../../userlist/ 或者../userlist/根据自己项目和路由配置灵活调整。
在前端的路由需要熟悉模板语法
<td><a href="{% url 'userdelete'%}?nid={{ items.id }}" style="text-decoration: none">删除</a>
这里面的这部分{% url 'userdelete'%} 就直接匹配到位了
其次就是继承模板
{% extends "user_index.html" %}
编写模板中需要我们填充的部分
{% block content %}
#前端代码实现块
{%end block%}
还需要特别说明的就是bootstrap的使用,版本之间组件还有不同,用的时候需要特别关注、
其中在django中二级url中的配置如下:
# 普通的增删改查
path('userlist/',views.userlist),
path('useradd/',views.useradd,name='useradd'),
path('userdelete/',views.userdelete,name="userdelete"),
path('<int:nid>/update/',views.usereditor,name='usereditor'),
# modleform 和from
path('useraddform/', views.useraddform, name='useraddform'),
path('useraddmodleform/', views.useraddmodleform, name='useraddmodleform'),
path('<int:nid>/modelupdate/', views.usereditormodleform, name='useraddmodleform'),


![BUUCTF Misc [SUCTF2018]single dog 我吃三明治 sqltest [SWPU2019]你有没有好好看网课?](https://img-blog.csdnimg.cn/90594a49c34246b28e243bc4e5bd3e3f.png)






![C++中delete 和 delete []的真正区别](https://img-blog.csdnimg.cn/img_convert/f7a0bd71e261751f05847432f3efc202.png)










