zoukankan      html  css  js  c++  java
  • Django框架(二)

    一:Django项目创建步骤:

    方式1:命令创建:

    进入指定目录

    C:Usersing>F:

    F:>cd mysite

    F:mysite>django-admin startproject mysite

    F:mysite>python manage.py startapp app01

    F:mysite>python manage.py startapp app02

    F:mysite>python manage.py startapp app03(一个Django项目可以有多个app)

    admin:Django自带后台管理相关配置,用于操作数据库(数据库的创建,修改,删除,数据表数据行的增删改查),可以不用pymysql和Navicat操作数据库了

    apps.py:表示当前app的配置文件

    models.py:写类,Django根据这个类来操作数据库表(和SQLAlchemy相似,写类和函数操作数据库)

    test.py:快速做单元测试

    views.py:视图函数(业务处理)

    migrations:创建数据库表和行时,Django自动生成的文件

    方式2:图形界面创建Django项目

     二.

     

    启动项目,输入URL地址:http://127.0.0.1:8000/admin/出现一个登录界面

     1.路由系统:

      url ->函数

      a.一一对应关系

        /login/->def login()

      b./add_user  

      HTML:有一个搜索引擎优化(SEO),要想排名靠前就不要写 <li>{{ i }} | <a href="/edit/?nid={{ i }}">编辑</a></li> 这样的语句,如果是GET传参,nid的值经常变动,因为这种语句的权重比较低。

      而要写这样的语句

      http://127.0.0.1:8000/edit/?nid=ffffffff/(权重低)

      http://127.0.0.1:8000/edit/ffffffff/(认可,权重高)    urls.py配置:   url(r'^edit/(w+)/', views.edit),  r代表原生字符,(w+)代表所有字母和数字,还有下划线(a-z、A-Z、0-9、_) 

      urls.py:   url(r'^edit/(w+).html/', views.edit)  url可以写正则表达式,(w+)是动态的,所以这样的也叫动态路由,如果是这样:url(r'^edit/(w+)/(w+).html/', views.edit),#edit得有两个参数去接收

     ORM操作表(创建表,增删改查)

    创建表:

    class UserGroup(models.Model):
        """
        部门
        """
        title = models.CharField(max_length=32)
    创建部门表
    class UserInfo(models.Model):
        """
        员工
        """
        nid = models.BigAutoField(primary_key=True)
        user= models.CharField(max_length=32)
        password = models.CharField(max_length=64)
        # age = models.IntegerField(null=True)
        age = models.IntegerField(default=1)
        ug = models.ForeignKey("UserGroup",null=True)
        # ug自动生成ug_id列
    创建员工表

    6.创建数据表:
    命令:
    python manage.py makemigrations 第一条记录相关日志
    python manage.py migrate 第二条执行结果
    英文单词: migrate:移动; 迁移,移往; 随季节而移居;

    nid = models.BigAutoField(primary_key=True) 这一行可以不用设置
    Django里会自动设置主键,主键名默认为id,而且是自增id,null=True设置默认为空或 default=1默认值为1,CharField必须设置max_length最大长度,不然程序会报错

    ug = models.ForeignKey("UserGroup",null=True) 创建员工表的外键      # ug自动生成ug_id列

    Django1.8以后把settings中的TEMPLATE_DIRS配置项移到了TEMPLATES 下

    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,'templates'),
    )
    settings.py要隐藏的配置文件
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    settings.py文件里的目标配置文件TEMPLATES

    migrations下面的py文件不要删,这个可以查看创建表和增删改查表等操作的记录,可以及时发现问题

    1.python manage.py makemigrations的作用是执行一次就读取models.py文件里的类,然后在migrations目录下生成配置文件,

    2.python manage.py migrate拿着生成的配置文件去生成数据库的语句

    修改表里的列,比如员工表里的user改成username,然后执行两条命令就好了

    1.python manage.py makemigrations

    2.python manage.py migrate

     数据表的增删改查

    #1.新增:

    def index(request):
        #增删改查
        from app01 import models
        #新增
        models.UserGroup.objects.create(title='研发部')
      
    return HttpResponse('bing')

    http://127.0.0.1:8000/app01/index.html 浏览器访问,相当于执行了sql语句

    #2.查:

    group_list = models.UserGroup.objects.all() 查所有部门表信息
    print(group_list) #输出一个QuerySet对象
    输出:<QuerySet [<UserGroup: UserGroup object>, <UserGroup: UserGroup object>, <UserGroup: UserGroup object>, <UserGroup: UserGroup object>]>
        
    user_list = models.UserInfo.objects.all()  查所有员工表信息
    print(user_list)
    输出:<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
    # 数据库相关操作
    def index(request):
        # 增删改查
        from app01 import models
        # 新增
        # models.UserGroup.objects.create(title='销售部')   ----insert into 
        # models.UserInfo.objects.create(user='root',password='pwd',age=18,ug_id=1)
        # 查找
        # group_list = models.UserGroup.objects.all()    
        # group_list = models.UserGroup.objects.filter(id=1)   filter相当于where
        # group_list = models.UserGroup.objects.filter(id__gt=1)  gt大于
        # group_list = models.UserGroup.objects.filter(id__lt=1)  lt小于
    
        # 删除
        # models.UserGroup.objects.filter(id=2).delete()  删除相当于delete from tablename where id=2;
    
        # 更新
        models.UserGroup.objects.filter(id=2).update(title='公关部')    相当于update tablename set title='公关部' where id = 2;
    
        # group_list QuerySet类型(列表)
        # QuerySet类型[obj,obj,obj]
        # print(group_list)
        # for row in group_list:
        #     print(row.id,row.title)
        输出研发部,运维部
    # models.UserInfo.objects.all() group_list = models.UserGroup.objects.all() return render(request,'newindex.html',{"group_list": group_list})
  • 相关阅读:
    Win10 安装 Oracle32bit客户端 提示:引用数据不可用于验证此操作系统分发的先决条件
    ORACLE 拆分逗号分隔字符串函数
    PLSQL 中文乱码
    不要把分层当做解耦!
    MySQL 迁移到 PG 怎么做
    在 MySQL 创造类似 PipelineDB 的流视图(continuous view)
    TeamViewer 的替代品 ZeroTier + NoMachine
    所有 HTML attribute
    使用PG的部分索引
    基于 500 份标注数据用深度学习破解验证码
  • 原文地址:https://www.cnblogs.com/bingabcd/p/7066170.html
Copyright © 2011-2022 走看看