一、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.index,name='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 '' 'ddddd' %}

    (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:\Users\mu\PycharmProjects\day58mysite> 终端执行命令
  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方式)

django上课笔记1-目录介绍-路由系统-ORM操作的更多相关文章

  1. [oldboy-django][2深入django]django目录说明 + 路由系统

    django project目录说明 project - app01 -- admin.py #django自带后台管理 -- apps.py #app01配置文件 -- models.py #编写类 ...

  2. django上课笔记3-ORM补充-CSRF (跨站请求伪造)

    一.ORM补充 ORM操作三大难点: 正向操作反向操作连表 其它基本操作(包含F Q extra) 性能相关的操作 class UserInfo(models.Model): uid = models ...

  3. Django中的app及mysql数据库篇(ORM操作)

    Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都 ...

  4. python web框架 Django的APP以及目录介绍 django 1.11版本

    如果有很多业务请求函数 应该放在app目录 很多业务放在主站上 当用户一点跳到分站 例如 一个项目叫运维平台  他的业务 有资产管理 私有云 监控 不同业务线 chouti项目 - chouti - ...

  5. django上课笔记7-jQuery Ajax 和 原生Ajax-伪造的Ajax-三种Ajax上传文件方法-JSONP和CORS跨域资源共享

    一.jQuery Ajax 和 原生Ajax from django.conf.urls import url from django.contrib import admin from app01 ...

  6. python web框架 Django的APP以及目录介绍 2

    app: migrations 数据修改表结构 admin Django为我们提供的后台管理 apps 配置当前app models ORM,写指定的类 通过命令可以创建数据库结构 tests 单元测 ...

  7. Crusher Django 学习笔记3 学习使用模板系统

    http://crusher-milling.blogspot.com/2013/09/crusher-django-tutorial3-using-template.html 顺便学习一下 goag ...

  8. django上课笔记6-MVC,MTV架构-中间件-初识Form组件

    一.MVC,MTV架构 models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC models(数据库,模型) templates(htm ...

  9. django上课笔记5-FK关联

    一.FK关联 FK关联 url.py里 from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r' ...

随机推荐

  1. android Activity生命周期的例子

    package com.example.yanlei.yl2; import android.app.AlertDialog; import android.content.DialogInterfa ...

  2. 【mac】mac上安装JDK

    安装步骤就是在Oracle官网下载你想要的JDK版本下载,下载的时候同意协议即可 这里就给出jdk安装的位置 还有一点要注意的是,在指定JVM的位置的时候,需要指定到home目录下

  3. Android ZXing 二维码、条形码扫描介绍

    本帖最后由 Shims 于 2013-11-9 12:39 编辑 最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个开源的 ZXing项目.它提供二维码和条形码 ...

  4. svm、logistic regression对比

    相同点:都是线性分类算法 不同点: 1.损失函数不同 LR:基于“给定x和参数,y服从二项分布”的假设,由极大似然估计推导 SVM: hinge loss + L2 regularization的标准 ...

  5. elasticsearch学习网站

    elasticsearch学习网站 https://elasticsearch.cn/

  6. gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')

    我们要考虑两种情况? 1. 本地安装和全局安装gulp npm i -g gulp && npm i --save-dev gulp 2.新建package.json,然后手动填写缺少 ...

  7. C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型

    C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...

  8. 自己动手写CPU之第九阶段(4)——载入存储指令实现思路

    将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

  9. Qt浅谈之二十一log调试日志

    一.简单介绍 近期因调试code时,想了解程序的流程,但苦于没有一个简易的日志记录,不停使用qDebug打印输出,而终于提交代码时得去多次删除信息打印,有时还会出现新改动的代码分不清是哪些部分.而使用 ...

  10. 关于Android滑动冲突的解决方法(二)

    之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直 ...