靓号管理

9.1表结构

根据表结构的需求,在models.py中创建类(由类生成数据库中的表)。

class PrettyNum(models.Model):
    """"靓号表"""


mobile = models.CharField(verbose_name="手机号", max_length=11)
price = models.IntegerField(verbose_name="价格", default=0)

level_choices = (
    (1, "1级"),
    (2, "2级"),
    (3, "3级"),
    (4, "4级"),
)
level = models.SmallIntegerField(verbose_name="级别", choices=level_choices, default=1)

status_choices = (
    (1, "已占用"),
    (2, "未使用"),
)
status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=2)

 9.2靓号列表

  •  9.3列表点击跳转:/pretty/add/
  •                                   URL
  • ModelForm类
from django import forms
class PrettyModelForm(forms.ModelForm):
  ...
  • 函数

实例化类的对象

通过render将对象传入到HTML中。

模板的循环展示所有的字段。

  • 点击提交
  • 数据校验
  • 保存到数据库
  • 跳转回靓号列表。

9.4编辑靓号

  • 列表页面:/pretty/数字/edit/ 
  • URL
  • 函数

根据ID获取当前编辑的对象

 ModelForm配合,默认显示数据。

提交修改。

 

不允许手机号重复。

添加:【正则表达式】【手机号不能存在】

    #[obj, obj, obj]
    queryset = models.PrettyNum.objects.filter(mobile="1888888888")

    obj = models.PrettyNum.objects.filter(mobile="1888888888").first()

    #True/False
    exists = models.prettyNum.objects.filter(mobile="1888888888").exists()

编辑:【正则表达式】【手机号不能存在】

排除自己以外,其他的数据能否手机号是否重复
#id!=2 and mobile='1888888888'
models.PrettyNum.objects.filter(mobile="1888888888").exclude(id=2)

 9.5 搜索手机号

 

models.PrettyNum.objects.filter(mobile='19999999991', id=12)
data_dict = {"mobile": "19999999991", "id": 123}
models.PrettyNum.objects.filter(**data_dict)

models.PrettyNum.objects.filter(id=12)  # 等于12
models.PrettyNum.objects.filter(id_gt=12)  # 大于12
models.PrettyNum.objects.filter(id_gte=12)  # 大于等于12
models.PrettyNum.objects.filter(id_lt=12)  # 小于12
data_dict = {"mobile":"19999999991","id":123}
models.PrettyNum.objects.filter(mobile_contain='999')
models.PrettyNum.objects.filter(mobile_startswith='1999')  #筛选出以1999开头
models.PrettyNum.objects.filter(mobile_endswith='999')  #筛选出以999结尾
models.PrettyNum.objects.filter(mobile_contains='999')  #筛选出包含999

 

#1.根据用户想要访问的页码,计算出起止位置
page = int(request.GET.get('page',1))
page_size =10  #每页显示10条数据
start = (page-1)*page_size
end = page*page_size

queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]

#数据总条数
total_count = models.PrettyNum.objects.filter(**data_dict).order_by("-level").count()
queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]

 

 

 

 

 

 

 

 

9.6分页

queryset=models.PrettyNum.objects.all()
queryset=models.PrettyNum.objects.filter(id=1)[0:10]
#第1页
queryset=models.PrettyNum.objects.all()[0:10]
#第2页
queryset=models.PrettyNum.objects.all()[10:20]
#第3页
queryset=models.PrettyNum.objects.all()[20:30]

data = models.PrettyNum.objects.all().count() data = models.PrettyNum.objects.filter(id=1).count()

  • 分页的逻辑和处理规则
  • 封装分页类

从头到尾开发

写项目用【pagination.py】公共组件。

  • 小Bug,搜索+分页情况下。

分页时候,保留原来的搜索条件。

两个链接网站:1、

            2、

 

 

#总页码
total_page_count,div = divmod(total_count,page_size)
if div:
    total_page_count += 1
#计算出,显示出当前页的前五页、后五页
start_page = page - 5
#页码
page_str_list =[]
 for i in range(1,total_page_count +1):
     else = '<li></li>'.format(i,i)
     page_str_list.append(ele)
page_string = mark_safe("".join(page_str_list))

return render(request,'prettty_list.html

 10、时间插件 

11、ModelForm和BootStrap

ModelForm可以帮助我们生成HTML标签。

 

 

class UserModelForm(forms.ModelForm):

         name = forms.CharField(min_length=3,label="用户名")
         
         class Meta:
             model = models.UserInfo
             fields = ["name","password",]
    form = UserModelForm()
    
{{form.name}}     普通的input框
{{form.password}}  普通的input框

 

 12、管理员编辑

 

if request .method=="GET“

  form = AminEditModelForm(instance=row_object)
return render(request.'change.html',{"form",form,"title":title})

form=AminEditModelForm(data=request.POST,instance = row_object)
if form.is_valid():
form.save()
return redirect('/admin/list/')
return render(request

 

13、用户登录

http无状态短连接

什么是cookie和session?

 http://127.0.0.1:8000/admin/list/
 https://127.0.0.1:8000/admin/list/

 

1、保存在浏览器上的键值

2、发送请求时,自动携带。

字典cookie、

响应体、响应头(cookie)

 

 15、Ajax请求

浏览器向网站发送请求时:URL和表单的形式提交。

  • GET
  • POST

特点:页面刷新。

 

除此之外,也可以基于Ajax向后台发送请求(偷偷的发送请求)。

  •   依赖jQuery
  •   编写ajax代码
    $.ajax({
        url:"发送的地址",
        type:"get",
        data:{
            n1:123,
            n2:456
        },
       success:function(res){
           console.log(res);
       }
    })

15.1 GET请求

 $.ajax({
         url:'/task/ajax/'
         type:"get"
         data:{
              n1:123,
              n2:456
         },
         success:function(res){
             console.log(res);
         }
})
from django.shortcuts import render, HttpResponse
def task_list(request):
    """"任务列表"""
    return render(request,"task_list.html")

def task_ajax(request):
     print(request.GET)
    return HttpResponse("成功了")

 

 

 

 

posted @ 2022-04-14 17:25  费皿啊  阅读(91)  评论(0)    收藏  举报