Url的两种显示 一种是以? Get的方式
Views.py
USER_DICT = { ‘1‘: {‘name‘: ‘root1‘, ‘email‘: ‘[email protected]‘}, ‘2‘: {‘name‘: ‘root2‘, ‘email‘: ‘[email protected]‘}, ‘3‘: {‘name‘: ‘root3‘, ‘email‘: ‘[email protected]‘}, ‘4‘: {‘name‘: ‘root4‘, ‘email‘: ‘[email protected]‘}, ‘5‘: {‘name‘: ‘root5‘, ‘email‘: ‘[email protected]‘}} def index(request): return render(request, ‘index.html‘, {"user_dict": USER_DICT})
Index.html
{% for i,k in user_dict.items %} <h3><a target="_blank" href="/detail/?nid={{ i }}">{{ k.name }}</a></h3> {% endfor %}
点击的时候 index.html 去做跳转
(少图片)
配置点击后的路径路由
点击后根据a链接提供的路径来显示不同的页面
在后台get接受下不同的字典的键值,然后根据不同的键值去获取不同的内容
# 细节
def detail(reques,nid):
nid = request.GET.get(‘nid‘)
detail_info = USER_DICT[nid] #USER_DICT 字典的一个url
return render(request, ‘detail.html‘, {‘detail_info‘: detail_info})
然后在页面中直接渲染显示
detail.html
{% for v,k in detail_info.items %}
<h1>{{ v }}---{{ k }}</h1>
<h1>{{ detail_info }}</h1>
{% endfor %}
显示的结果
注意 : 在SEO的优化中 更偏向的是另一种写法 权重是不一样的
Urls.py 配置的路径需要改为
url(r‘^detail-(\d+).html/‘, views.detail),
模板里需要配置
在页面的显示
所以最终版就是
Urls配置路径 这里的\d 会传递给views里的值必须找变量来接受
url(r‘^detail-(\d+).html/‘, views.detail),
Index.html 里来获取调到页面的信息
{% for i,k in user_dict.items %}
<h3><a href="/detail-{{ i }}.html/">{{ k.name }}</a></h3>
{% endfor %}
View.py 来接受到urls.py给的信息 这样就免去了get的获取
def detail(request, nid): # 默认的url就访问的到nid里的信息
detail_info = USER_DICT[nid]
return render(request, ‘detail.html‘, {‘detail_info‘: detail_info})
在detail.html html页面只要一份就可以了
<h3>详细</h3>
{% for v,k in detail_info.items %}
<h1>{{ v }}---{{ k }}</h1>
<h1>{{ detail_info }}</h1>
{% endfor %}
然后就可以显示不同的页面了
向视图里面传递两个参数 这里传递nid就得写nid不能改
url(r‘^detail-(?P<nid>\d+)-(?P<uid>\d+).html/‘, views.detail),
这两个参数在views.py的显示位置就可以随意的切换
def detail(request, uid, nid):
print(uid,nid)
detail_info = USER_DICT[nid]
return render(request, ‘detail.html‘, {‘detail_info‘: detail_info})
输出的结果 就是对应的url 不会变
def func(*args):
(1,2,3,4) 元祖的方式来保存的
print(args)
func(1, 2, 3, 4)
def func(**kwargs):
print(kwargs) 这里是以键值对的方式存放的
func(‘k1‘ = 1, ‘k2‘= 2,‘k3‘ = 3)
Orm 映射
创建语句
首先在models里创建一个表
然后在views里倒入这个表
from app01 import models
之后写方法就行了
第一种 推荐第一种 数据表的添加
dic = {‘username‘:‘tom‘, ‘userpwd‘:123}
models.UserInfo.objects.create(**dic) # 支持已字典的方式保存
models.UserInfo.objects.create(username=‘root‘,userpwd=‘123‘)
第二种
obj = models.UserInfo(username=‘xiaoming‘, userpwd=‘123‘)
obj.save()
查询语句
def orm(request):
res = models.UserInfo.objects.all()
res = models.UserInfo.objects.filter(id=0) 所有的数据
# ,QuerySet => Django[] 查询所有的数据
for v in res:
print(v.id, v.username, v.userpwd)
return HttpResponse(‘ok‘)
Filter 就类似是where
res = models.UserInfo.objects.filter(id__gt=2) 查询id大于2的
删除 这个表的id里的值是5的数据
models.UserInfo.objects.filter(id=5).delete()
# 更新 密码都更新成6666
models.UserInfo.objects.all().update(userpwd=666)
判断用户的登录一般是两种
def login(request):
if request.method == ‘GET‘:
return render(request, ‘login.html‘)
elif request.method == ‘POST‘:
v = request.POST.get(‘user‘)
p = request.POST.get(‘pwd‘) 一种是判断数量 大于0说明存在
obj = models.UserInfo.objects.filter(username=v, userpwd=p).first()
obj = models.UserInfo.objects.filter(username=v, userpwd=p).count()
print(obj) # <QuerySet []>
if obj:# 一般都是用 first 来判断
return redirect(‘/‘)
else:
return render(request, ‘login.html‘)
return render(request, ‘login.html‘)
else:
return redirect(‘/‘)