博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端知识——Django
阅读量:5256 次
发布时间:2019-06-14

本文共 7702 字,大约阅读时间需要 25 分钟。

一、路由系统

   路由系统就是通过Django来实现的类似nginx rewrite的功能,并且支持正则表达式的结构

 普通关系是

/index/ -> 函数

动态关系:

在django里面urls.py里面urlpatterns = [    url(r'^admin/', admin.site.urls),    # url(r'^login/', views.login),    # url(r'^detail1/(\d+)/', views.detail1),    # url(r'^detail2/(\d+)/(\d+)/', views.detail2),    # url(r'^detail3/(?P
\d+)/(?P
\d+)/', views.detail3),]

 上面的三条detail就是通过正则来实现的,下面是对应的程序

# def detail1(render,nid):#     print(nid)#     return HttpResponse("ok")## def detail2(render,nid,nnid):#     print(nid,nnid)#     return HttpResponse("ok")## def detail3(render,p1,x1):#     print(p1,x1)#     return HttpResponse("ok")

 

现在来说一下路由分发

 这个是实现的程序内部 

view.pyUSER_INFO=[]for item in range(98):    temp={'id':item,'username':'wzc'+str(item),'email':'email'+str(item)}    USER_INFO.append(temp)def index(request,page):    print(page)    page=int(page)    start_page=(page-1)*10    end_page=page*10    user_list=USER_INFO[start_page:end_page]    return render(request,'index.html',{'user_list':user_list})def detail(request,nid):    nid=int(nid)    cdd=USER_INFO[nid]    return render(request,'detail.html',{'cdd':cdd})

 我们使用的时候,只用到了index和detail,所以路由规则的时候只需要写这两条,#自己去掉就好了

urls.py    # url(r'^index/(\d+)', views.index),    # url(r'^detail/(\d+)', views.detail),

 这个是index对应的页面

    
Title
{% for foo in user_list %}
{% endfor %}
ID 用户名 邮箱
{
{ foo.id }}
{
{ foo.username }}
{
{ foo.email }}
详细信息

 这个是detail对应的页面

    
Title
  • {
    { cdd.id }}
  • {
    { cdd.username }}
  • {
    { cdd.email }}

 

模板语言

  

{% for item in user_list %}        
  • XXXXX
  • {% endfor %}

     

    {% if k1|f3 %}        

    XXX

    {% else %}

    XXX

    {% endif %}

     内置方法:

    {
    { item.event_start|data:"Y-m-d H:i:s"}}{
    { bio|truncatewords:"30"}}只显示30个字符{
    { my_list|first|upper}}首字母大写{
    { name|lower}}全部小写

     

    自定义方法:

      filter

      simple_tag

      1、创建指定文件,并且文件的名称不能改,必须使用templatetags

        在app里面创建目录

      2、创建任意名字的py文件

        

    from django import templateregister=template.Library()#返回值的名称必须叫做register,这个是不可以修改的@register.filterdef f1(value,arg):    return value+'666'+arg

     @register.filter ,在定义函数的时候,使用这个了以后,就变成模板语言里面的函数,这个就是创建对应的函数

     

    3、在html模板头部必须要执行

    {% load XX %}

     这样就相当于是导入脚本

     

    4、如何使用

      {

    { k1|f1}},前面是对应的k值,后面是对应的函数值,返回的结果就是把k1对应的value值传到函数里面后得到的数据

    5、需要在settings里面注册对应的子项目名称

    传参数的使用方法是:

      {

    { k1|f1:"123"}}

     

    需要注意的是filter和sample_tag是有区别的

    filter:对应的参数只能有一个,使用方法如上,支持在if里面当做条件,因为使用管道符

    sample_tag:参数可以有多个,使用方法{% f2 1 2 3%},不支持在if的条件中使用

     

    {% load xx %}    
    Title {% if k1|f3 %}

    Ture

    {% else %}

    False

    {% endif %}

     

    from django import templateregister=template.Library()@register.filterdef f1(value,arg):    return value+'666'+arg@register.simple_tagdef f2(s1,s2,s3,s4):    return s1+s2+s3+s4@register.filterdef f3(value):    if value == 'vvv':        return True    return False

     

    模板的使用实例:

        
    {% block css %}{% endblock %}
    后台系统V1
    {% block body %}{% endblock %}
    {% block js %}{% endblock %}

     

    {% extends 'layout.html' %}{% block css %}    {% endblock %}{% block body %}    
      {% for item in user_list %}
    • {
      { item.username }},{
      { item.salary }}
    • {% endfor %}
    {% endblock %}{% block js %}{% endblock %}

     这样相同的模板就可以使用不一样的js和css了

     

    Ajax

        
    Title

    用户名

    密码

     

    # def ajax_demo(request):#     if request.method == "POST" :#         user=request.POST.get('user',None)#         pwd=request.POST.get('pwd',None)#         if user == "111" and pwd == "222":#             return HttpResponse('1')#         else:#             return HttpResponse('2')#     return render(request,'ajax_demo.html')import jsondef ajax_demo(request):    if request.method == "POST" :        ret={'status':False,'message':""}        user=request.POST.get('user',None)        pwd=request.POST.get('pwd',None)        if user == "111" and pwd == "222":            ret['status']=True            return HttpResponse(json.dumps(ret))        else:            ret['message']="用户名密码错误"            return HttpResponse(json.dumps(ret))    return render(request,'ajax_demo.html')

     

    model,ORM

    1、创建(CURD)数据库表
    class -> DB,表
    DB,表 -> 类
    a. app.models.py写类
    from django.db import models
    class userinfo(models.Model):
    name = models.CharField(max_length=30) # string
    email = models.EmailField() # string,帮助admin做输入验证,modelform
    memo = models.TextField() # text
    b. python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser

    from django.db import models# Create your models here.class userinfo(models.Model):    nid=models.AutoField(primary_key=True)    name=models.CharField(max_length=30)    email=models.EmailField()    memo=models.TextField()    img=models.ImageField()    user_type=models.ForeignKey('user_type',null=True,blank=True)class user_type(models.Model):    name=models.CharField(max_length=32)    def __str__(self):        return self.name

     

    2、操作数据库的数据
    1、models.AutoField  自增列 = int(11)
      如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
    2、models.CharField  字符串字段
      必须 max_length 参数
    3、models.BooleanField  布尔类型=tinyint(1)
      不能为空,Blank=True
    4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
    input: 12,345,989871234,
      继承CharField,所以必须 max_lenght 参数
    5、models.DateField  日期类型 date
      对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
    6、models.DateTimeField  日期类型 datetime
      同DateField的参数
    7、models.Decimal  十进制小数类型 = decimal
      必须指定整数位max_digits和小数位decimal_places
    8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
      对字符串进行正则表达式
    9、models.FloatField  浮点类型 = double
    10、models.IntegerField  整形
    11、models.BigIntegerField  长整形
      integer_field_ranges = {
        'SmallIntegerField': (-32768, 32767),
        'IntegerField': (-2147483648, 2147483647),
        'BigIntegerField': (-9223372036854775808, 9223372036854775807),
        'PositiveSmallIntegerField': (0, 32767),
        'PositiveIntegerField': (0, 2147483647),
      }
    12、models.IPAddressField  字符串类型(ip4正则表达式)
    13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
      参数protocol可以是:both、ipv4、ipv6
      验证时,会根据设置报错
    14、models.NullBooleanField  允许为空的布尔类型
    15、models.PositiveIntegerFiel  正Integer
    16、models.PositiveSmallIntegerField  正smallInteger
    17、models.SlugField  减号、下划线、字母、数字
    18、models.SmallIntegerField  数字
      数据库中的字段有:tinyint、smallint、int、bigint
    19、models.TextField  字符串=longtext
    20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
    21、models.URLField  字符串,地址正则表达式
    22、models.BinaryField  二进制
    23、models.ImageField 图片 字符串
    24、models.FilePathField 文件 字符串

     

    a. 单表

    b. 一对多:Forigkey
    c. 多对多
    d. 一对一
    obj = model.UserInfo.objects.filter(name='alex')
    print obj.query
    queryset -> python,Django的类
    [obj1,obj2,obj3]
    obj = model.UserInfo.objects.filter(name='alex').values('id','email')
    # select id from userinfo where name = 'alex'
    queryset -> python,Django的类
    [{'id':1},{'id': 2},]
    obj = model.UserInfo.objects.filter(name='alex').value_list('id','email')
    # select id from userinfo where name = 'alex'
    queryset -> python,Django的类
    [(1,'1@qq.com'),(2,'alex@11.com'),]
    queryset.query => SQL语句

    转载于:https://www.cnblogs.com/wlzhc/p/5850453.html

    你可能感兴趣的文章
    toolbox类
    查看>>
    如何快速掌握一门技术
    查看>>
    利用AMPScript获取Uber用户数据的访问权限
    查看>>
    vagrant 同时设置多个同步目录
    查看>>
    python接口自动化28-requests-html爬虫框架
    查看>>
    爬虫学习笔记(一)初识爬虫
    查看>>
    生成随机数的模板
    查看>>
    SpringMVC文件上传
    查看>>
    hdu 2093
    查看>>
    纸上谈兵: 树, 二叉树, 二叉搜索树[转]
    查看>>
    Mysql 数据库操作
    查看>>
    SQL表中的自连接定义与用法示例
    查看>>
    hdu 1032 The 3n + 1 problem
    查看>>
    static关键字
    查看>>
    转:linux终端常用快捷键
    查看>>
    009.栈实现队列
    查看>>
    A-Softmax的总结及与L-Softmax的对比——SphereFace
    查看>>
    关于软件盘覆盖住布局
    查看>>
    Unity3D 控制物体移动、旋转、缩放
    查看>>
    UVa 11059 最大乘积
    查看>>