• Title


     一、Django目录介绍

      django-admin startproject mysite # 创建名为mysite的项目
      cd mysite # 切换到该目录下
      python manage.py starapp app01 # 创建app01业务线

      project
      - app01
        - admin Django自带后台管理相关配置
        - modal 写类,根据类创建数据库表
        - test 单元测试
        - views 业务处理
      - app02
      - app03

    二、路由系统   

    url和函数的对应关系

      a. /login/ -> def login # 一 一对应(静态)

      b. /add-user/(w+)/.html/ -> def add_user(request,a1) #加正则表达式 在视图函数add_user中 a1接收url中(w+)的内容(动态)

      c. /add-user/(?P<a1>w+)/(?P<a2>w+)/ -> def add_user(request,a1,a2) # 将匹配到的w+内容赋给指定的a1和a2(不管顺序)

      d. /add-user/(?P<a1>w+)/(?P<a2>w+)/ -> def add_user(request,*args,**kwargs) # 万能匹配 位置参数和关键字参数

      PS:
      伪静态
        url(r'^edit/(w+).html$', views.edit), # .html$结尾 sel权重比较高
      e. 路由分发
        在项目的 urls.py中分发

        url(r'^app01/', include('app01.urls',namespace='01')),

        url(r'^app02/', include('app02.urls',namespace='02')),



        app01 urls.py
          url(r'^index.html$', views.indexname='h1'),
        app02 urls.py
          url(r'^login.html$', views.login,name='h1'),
        

        命名空间区分 如果app01 urls.py 和 app02 urls.py 中有name属性相同时,前端生成URL的时候会报错,此时要用到 namespace 属性加以区分

    <h1>{% url '01:h1'%} Hello World </h1> # 表示生成的是app01下的name等于h1的URL
    

        根据名称可以在 函数中 反向生成URL
        url(r'^index/(w+)', views.index,name=n1),
      1. 在Python代码中
        from django.urls import reverse
        v = reverse('n1',args=(123,))     # 这里的args里边的123参数是用来替换url中(d+)位置的数字
        print(v)

        url(r'^index/(?P<a1>w+)', views.index,name=n1),
        from django.urls import reverse
        v = reverse('n1',kwargs={'a1':123})  # 也可以通过字典的形式给url的(d+)重新赋值,重新生成新的url然后赋值给v
        print(v)

      2.
        url(r'^login/', views.login,name='m1')
        在HTML页面中需要跳转的页面里可以直接写下面的代码代替跳转路径
        {% url "m1" %}

        {% url "m1" i %} #传值 如果url中有(d+)、(w+)之类的参数需要在m1的后面传入相应个数的参数

      3. 模板语言

    • {{ item }}  # 两个大括号传值进去
    • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}  # 一个大括号一个百分号传 语句
    • 母板:{% block title %}{% endblock %}
    • 子板:{% extends "base.html" %}

          {% block title %}<h1> Hello World </h1>{% endblock %}

      示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div style="height: 50px;background-color: grey"></div>
    {% block con %}{% endblock %}
    <div style="height: 50px;text-align: center;background-color: chartreuse">转载请注明出处</div>
    </body>
    </html>
    母板 base.html
    {% extends 'base.html' %}
    
    {% block con %}<h1> Hello World </h1>{% endblock %}
    子板 index.html

       4.通过自定义simple_tag给前端模板生成标签

        (1) 在任意一个app的目录下创建templatetags的python包(就是里面一定要有__init__.py文件),如果不放在某个app目录下,会找不到。

         (2)在templatetags目录下创建xxx.py文件 如 mybase.py文件。

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    
    @register.simple_tag
    def my_simple_time():
        return 'HHHHHHHHHHHHHHHHHHHHH'
    
    
    @register.simple_tag
    def my_input(id, cla_name):
        result = "<input type='text' id='%s' class='%s' />" % (id, cla_name,)
        return mark_safe(result)
    mybase.py

        (3)在使用自定义的simple_tag的Html文件中导入mybase.py文件名

    {% load mybase %}
    

        (4) 使用simple_tag

    {% load mybase %}
    {% my_simple_time %}
    
    {% my_input '1202' 'ddddd' %}
    View Code

        (5)去配置文件settings注册templatetags目录所在的app名称,否则找不到mybase.py !!! 切记

    三、ORM操作  

     Http请求:
      url -> 视图(模板+数据)
      步骤:
    1.去配置文件里更改默认设置
      DATABASES = {
      'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME':'db3',
      'USER': 'root',
      'PASSWORD': '',
      'HOST': 'localhost',
      'PORT': '3306',
      }
      }

    2.去__init__文件添加
      import pymysql
      pymysql.install_as_MySQLdb()

    3.创建数据表
      在app01的models.py里边
      from django.db import models

      class UserGroup(models.Model):
      title = models.CharField(max_length=32) # 部门名称

      class UserInfo(models.Model):
      uid = models.BigAutoField(primary_key=True) #自增和主键ID(也可以不设置)
      username = models.CharField(max_length=32) #用户名
      passwd = models.CharField(max_length=64) #密码
      #age = models.IntegerField(default=1) #年龄
      age = models.ImageField(null=True) 插入一列,可以为空值
      # ug_id
      ug = models.ForeignKey('UserGroup',null=True)#外键关联部门的对应ID

    去settings里注册app
      INSTALLED_APPS = [
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',

      'app01',
      ]

    4.C:UsersmuPycharmProjectsday58mysite> 终端执行命令
      python manage.py makemigrations
      python manage.py migrate

    5.数据行的增删改查
      #增
      models.UserGroup.objects.create(title='销售部') #创建数据行
      models.UserInfo.objects.create(username='root',passwd='123',age='20',ug_id=1)
      #查
      userinfo_list = models.UserInfo.objects.all() #获取数据行,为Jqueryset对象
      userinfo_list = models.UserInfo.objects.filter(uid=1,username='alex') #filter过滤
      userinfo_list = models.UserInfo.objects.filter(uid__gt=1) # uid__gt=1 #意思为 uid大于1
      userinfo_list = models.UserInfo.objects.filter(uid__lt=1) # uid__lt=1 #意思为 uid小于1
      #删
      userinfo_list = models.UserInfo.objects.filter(uid=1).delete() # 删除数据行
      #改
      userinfo_list = models.UserInfo.objects.filter(uid=1).update(username='egon') # 先过虑找出对应数据行再update更新新值

    ORM利用pymysql第三方工具连接数据库
      默认:
        SQLlite
      MySQL:
        mysql -> MySQLDB(修改django默认连接mySQL方式)

  • 相关阅读:
    系统综合实践第三次作业
    系统综合实践第二次作业
    系统综合实践第一次作业
    第03组 Beta版本演示
    第03组 Beta冲刺(4/4)
    第04组 Beta版本演示
    第04组 Beta冲刺(4/4)
    第04组 Beta冲刺(3/4)
    第04组 Beta冲刺(2/4)
    第04组 Beta冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/guotianbao/p/7472085.html
Copyright © 2020-2023  润新知