标签:详解 admin ati ice 形参 多对多 any 限制 model
? 在html页面中实时更新数据表,并且每一条记录都有与之对应的编辑与删除按钮
1、配置路由信息
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.login),
url(r'^show/', views.show),
url(r'^edit/', views.edit),
url(r'^delete/', views.delete),
]
2、编写视图函数
# 展示视图
def show(request):
user_list = models.Userinfo.objects.all()
print(user_list)
return render(request,'msg.html',locals())
# 编辑视图
def edit(request):
edit_id = request.GET.get('user_id')
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
models.Userinfo.objects.filter(pk=edit_id).update(username=username,
password=password)
return redirect('/show')
edit_obj = models.Userinfo.objects.filter(pk=edit_id).first()
return render(request,'edit.html',locals())
# 删除视图
def delete(request):
delete_id = request.GET.get('user_id')
models.Userinfo.objects.filter(pk=delete_id).delete()
return redirect('/show')
3、编写html页面
<table class="table-bordered table tab-content table-hover">
<thead>
<tr>
<th>主键值</th>
<th>用户名</th>
<th>密码</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
<td class="text-center">
<a href="/edit/?user_id={{ user.id }}" class="btn btn-primary btn-sm">编辑</a>
<a href="/delete/?user_id={{ user.id }}" class="btn btn-danger btn-sm">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
针对 图书--出版社--作者
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField(max_length=32)
# 总共八位 小数占两位
price = models.DecimalField(max_digits=8,decimal_places=2)
# 书和出版社是一对多的关系 外键字段键在多的一方
publish_id = models.ForeignKey(to='Publish') # to指定跟谁是外键关联的 默认关联的是表的主键字段
"""
ForeignKey字段 django orm在创建表的时候 会自动给该字段添加_id后缀
"""
# 书和作者是多对多的关系 外键字段建在任何一方都可以 但是 推荐你建在查询频率比较高的一方
authors = models.ManyToManyField(to='Author')
"""authors字段仅仅是一个虚拟字段 不会再表中展示出来 仅仅是用来告诉django orm 书籍表和作者表示多对多的关系
自动创建第三张表
"""
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=255)
class Author(models.Model):
name = models.CharField(max_length=32)
phone = models.BigIntegerField()
# 一对一字段 建在哪张表都可以 但是推荐你建在 查询频率比较高的那张表
author_detail = models.OneToOneField(to='AuthorDetail')
"""
OneToOneField字段 django orm在创建表的时候 会自动给该字段添加_id后缀
"""
class AuthorDetail(models.Model):
addr = models.CharField(max_length=255)
age = models.IntegerField()
urls.py 路由与视图函数对应关系
url(r‘^test/(\d+)/‘, views.test),
? 会将(\d+)
这个正则所限制匹配的url当作位置参数传给视图函数test()
,若视图函数没有形参接收时,会直接报错。
url(r‘^test/(?P<month>\d+)/‘, views.test),
? 相当于给有名分组取别名,(?P<month>\d+)
此时别名为month,会将(\d+)
这个正则所限制匹配的url当作关键字参数传给视图函数test()
,并且视图函数必须用别名month来接收,如果没有形参接收或者不是month这个别名时,都会直接报错。
注意:有名分组与无名分组不能一起连用。
动态解析出一个结果 使该结果可以直接访问对应的url
url(r‘^test_add/‘, views.testadd,name=‘xxx‘)
{% url ‘xxx‘ %}
url = reverse(‘xxx‘)
url(r‘^test_addsajdsjkahdkjasjkdh/(\d+)/‘, views.testadd,name=‘xxx‘),
<a href="{% url ‘xxx‘ 1 %}">222</a>
url = reverse(‘xxx‘,args=(1,))
url(r‘^test_addsajdsjkahdkjasjkdh/(?P<year>\d+)/‘, views.testadd,name=‘xxx‘),
<a href="{% url ‘xxx‘ year=1 %}">222</a>
url = reverse(‘xxx‘,kwargs={‘year‘:123})
注意: 反向解析的别名 一定不要重复
django里面的app可以有自己的static文件夹,templates文件夹,urls.py
from django.conf.urls import url,include
url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls))
? 当有多个app里存在相同的视图函数名时,简单的路由分发一定会引起冲突,因此,为解决这种问题,我们给每个app设定独立的名称空间,这样才不会相互干扰。
url(r'^app01/',include('app01.urls',namespace='app01'))
url(r'^app02/',include('app02.urls',namespace='app02'))
print(reverse('app01:index'))
print(reverse('app02:index'))
# 通常情况下 起别名的时候 前面可以加上你的应用名
将动态网页伪装成静态网页
这样做的目的时为了提高搜索引擎的SEO查询的优先级,只不过,充钱的优先级永远干不过...
大版本分为1.x和2.x
区别:
标签:详解 admin ati ice 形参 多对多 any 限制 model
原文地址:https://www.cnblogs.com/dadazunzhe/p/11722852.html