首页 > 代码库 > django的CURD应用

django的CURD应用

Url的两种显示  一种是以? Get的方式

Views.py

USER_DICT = {
    1: {name: root1, email: root@qq.com},
    2: {name: root2, email: root@qq.com},
    3: {name: root3, email: root@qq.com},
    4: {name: root4, email: root@qq.com},
    5: {name: root5, email: root@qq.com}}
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=http://www.mamicode.com/"/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="http://www.mamicode.com/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(‘/‘)

 

django的CURD应用