zoukankan      html  css  js  c++  java
  • django 路由

    1, 可以在app中建立urls来建立二次目录,更好的区分开每层目录
    注意:在写代码的过程中注意不能使用$结尾,要使用namespance='app名'来建立域,防止寻找的过程之,在写入过程之中,父级要使用include,
    中存在串行
    代码:
    父url:
    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
     
    url(r'^app01/',include('app01.urls',namespace='app01'))
    子url:
    from django.conf.urls import url
    from app02 import views
    urlpatterns = [
        url(r'^book/',views.book)
    ]
    函数:
    def book(request):
        return HttpResponse('ok1')
     
    2,url命名和反向解析
    反向解析
    在url中:
    url(r'^home', views.home, name='home'),  # 给我的url匹配模式起名为 home
    url(r'^index/(d*)', views.index, name='index'),  # 给我的url匹配模式起名为index
    url(r'^author_list/$', views.author_list, name='author_list'),
    url(r'^home/([0-9]{4})/([0-9]{2})/',views.home,name='home'),
    url(r'^home/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.home,name='home'),
    在views中反向解析:
    from django.urls import reverse
    reverse('author_list')  ——》 '/author_list/'
    无名分组:
    reverse('home',args=('1999','06'))                     ——》'/home/1999/06/'
    如果在父url中有namespance=app01 则: reverse('app01:home',args=('1999','06'))
    有名分组
    reverse('home',kwargs={'year':'1998','month':'06'})    ——》'/home/1998/06/'
    模板中反向解析:
    {% url 'author_list' %}     ——》 '/author_list/'
     
    无名分组:
    {% url 'home' '2000' '09'  %}
            如果在url中有namespance=app01,则是{% url 'app01:home' '2000' '09'  %}
    有名分组:
    {% url 'home' '2000' '09'  %}
    {% url 'home'  month='09' year='1898' %}
    namespace是中
    from django.conf.urls import url, include
    urlpatterns = [
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]
    注意,多于两个的时候则需要加namespace 来确定命名空间,而且不能加$
     
     
    orm:
    setting中的配置={
    'default':{
    'ENGINE':"django.db.backends.mysql",
    "NAME":'你的数据库',
    "USER":"数据库的名字",
    'PASSWORD':'数据库的密码',
    'HOST':"数据库的ip",
    "POST":3306,
    }
    }
    在与django项目同名的目录之中下的__init__.py文件下写如下的代码,告诉django使用pymyslq模块连接mysql数据库
    import pymql
    pymysql.install_as_MySQLdb()
    数据库迁移的时候出现一个警告:
    WARNINGS是版本的不同出现的问题
    model:
    orm DB
    类  数据表
    对象 数据行
    属性 字段
    在models中定义类
    from django.db import models
    class Person(models.Model):
    first_name = mdoels.CharField(max_length=30)
    last_name = mdoels.CharField(max_length=30)
    字段:
    AutoField:自增,必须填primary_key = True ,成为主键,没有该字段时,django 自动创建
    integerField    一个整数类型, 范围 -2147483648 ~ 2147483647。
    CharField  必须提供max_length参数    max_length表示字符的长度
    DateField 日期格式为YYYY-MM-DD,相当于python的datetime.date的实例
    参数:auto_now   每次修改式为当前的时间
    DatetimeField 日期时间字段   包括日期时间
    字段类型
    AutoField(Field)
            - int自增列,必须填入参数 primary_key=True
     
        BigAutoField(AutoField)
            - bigint自增列,必须填入参数 primary_key=True
     
            注:当model中如果没有自增列,则自动会创建一个列名为id的列
            from django.db import models
     
            class UserInfo(models.Model):
                # 自动创建一个列名为id的且为自增的整数列
                username = models.CharField(max_length=32)
     
            class Group(models.Model):
                # 自定义自增列
                nid = models.AutoField(primary_key=True)
                name = models.CharField(max_length=32)
     
        SmallIntegerField(IntegerField):
            - 小整数 -32768 ~ 32767
     
        PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
            - 正小整数 0 ~ 32767
     
        IntegerField(Field)
            - 整数列(有符号的) -2147483648 ~ 2147483647
     
        PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
            - 正整数 0 ~ 2147483647
     
        BigIntegerField(IntegerField):
            - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
     
        BooleanField(Field)
            - 布尔值类型
     
        NullBooleanField(Field):
            - 可以为空的布尔值
     
        CharField(Field)
            - 字符类型
            - 必须提供max_length参数, max_length表示字符长度
     
        TextField(Field)
            - 文本类型
     
        EmailField(CharField):
            - 字符串类型,Django Admin以及ModelForm中提供验证机制
     
        IPAddressField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
     
        GenericIPAddressField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
            - 参数:
                protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
                unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
     
        URLField(CharField)
            - 字符串类型,Django Admin以及ModelForm中提供验证 URL
     
        SlugField(CharField)
            - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
     
        CommaSeparatedIntegerField(CharField)
            - 字符串类型,格式必须为逗号分割的数字
     
        UUIDField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
     
        FilePathField(Field)
            - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
            - 参数:
                    path,                      文件夹路径
                    match=None,                正则匹配
                    recursive=False,           递归下面的文件夹
                    allow_files=True,          允许文件
                    allow_folders=False,       允许文件夹
     
        FileField(Field)
            - 字符串,路径保存在数据库,文件上传到指定目录
            - 参数:
                upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
     
        ImageField(FileField)
            - 字符串,路径保存在数据库,文件上传到指定目录
            - 参数:
                upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
                width_field=None,   上传图片的高度保存的数据库字段名(字符串)
                height_field=None   上传图片的宽度保存的数据库字段名(字符串)
     
        DateTimeField(DateField)
            - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
     
        DateField(DateTimeCheckMixin, Field)
            - 日期格式      YYYY-MM-DD
     
        TimeField(DateTimeCheckMixin, Field)
            - 时间格式      HH:MM[:ss[.uuuuuu]]
     
        DurationField(Field)
            - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
     
        FloatField(Field)
            - 浮点型
     
        DecimalField(Field)
            - 10进制小数
            - 参数:
                max_digits,小数总长度
                decimal_places,小数位长度
     
        BinaryField(Field)
            - 二进制类型
    自定义char类型字段:
    class MyCharField(models.Field):
        """
        自定义的char类型的字段类
        """
        def __init__(self, max_length, *args, **kwargs):
            self.max_length = max_length
            super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs)
     
        def db_type(self, connection):
            """
            限定生成数据库表的字段类型为char,长度为max_length指定的值
            """
            return 'char(%s)' % self.max_length
     
    字段参数:
    null                数据库中字段是否可以为空
        db_column           数据库中字段的列名
        default             数据库中字段的默认值
        primary_key         数据库中字段是否为主键
        db_index            数据库中字段是否可以建立索引
        unique              数据库中字段是否可以建立唯一索引
        unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
        unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
        unique_for_year     数据库中字段【年】部分是否可以建立唯一索引
     
        verbose_name        Admin中显示的字段名称
        blank               Admin中是否允许用户输入为空
        editable            Admin中是否可以编辑
        help_text           Admin中该字段的提示信息
        choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                            如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
     
        error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                            字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                            如:{'null': "不能为空.", 'invalid': '格式错误'}
     
        validators          自定义错误验证(列表类型),从而定制想要的验证规则
                            from django.core.validators import RegexValidator
                            from django.core.validators import EmailValidator,URLValidator,DecimalValidator,
                            MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
                            如:
                                test = models.CharField(
                                    max_length=32,
                                    error_messages={
                                        'c1': '优先错信息1',
                                        'c2': '优先错信息2',
                                        'c3': '优先错信息3',
                                    },
                                   validators=[
                                      RegexValidator(regex='root_d+', message='错误了', code='c1'),
                                        RegexValidator(regex='root_112233d+', message='又错误了', code='c2'),
                                        EmailValidator(message='又错误了', code='c3'), ]
                                )
     
     
     
    orm :
    1命令:
    python manage.py makemigrations 记录models的变更记录
    python manage.py migrate   将变更记录同步到数据库中
    2orm
    modles.Publisher
     
    pub_obj.id
    pub_obj.name
     
    book_obj.id
    book_obj.title
    book_obj.publisher   -----关联的出版社的对象
    book_obj.pulisher_id ------关联出版社对象的id
    book_obj.publisher.id
    book_obj.publisher.name
     
    author_ob.id   
    author_ob.books   管理所有的对象
    author_ob.books.all()   作者关联的所有书籍对象书籍
    增:
    models.Publisher.objects.create(name="xxx")
     
    models.Book.object.create(name="xxx",publisher=publisher_obj)
    models.Book.objects.create(name="xxx",;publisher_id=publishr_obj.id)
     
    author_obj = models.Author.objects.create(name='xxx')
    author_obj.books.set([1,3,4])
    删除:
    对象列表.delete()
    对象.delete()
     
    修改:
    pub_obj.name='xxxx'
    pub_obj.save()
     
    book_obj.title="xxx"
    book.obj.publisher = publisher_obj
    book_obj.publisher_id=publisher_obj.id
    book_obj.save()
     
    author_obj.name="xxx"
    author_obj.save()
     
    zuthor_obj.books.set([]1,3,4)
     
     

  • 相关阅读:
    史上最复杂业务场景_逼出阿里高可用三大法宝
    六一儿童节PHP宝宝又被围剿了,迅速围观!
    程序员常用远程工具有哪些?
    Kotlin真的会取代JAVA吗?
    云通信—连接产品与用户的桥梁
    小团队能做大系统:Cloud_Native云原生架构实践
    打造立体化监控体系的最佳实践——分布式调用跟踪和监控时间
    “机器学习”三重门_“中庸之道”趋若人(深度学习入门系列之四)
    ehcache缓存
    hibernate延迟加载
  • 原文地址:https://www.cnblogs.com/lnrick/p/9692936.html
Copyright © 2011-2022 走看看