一、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. linux下二机制文件的查看和编辑

    linux下很多命令都是二机制:/bin/下的各种命令---/bin/sh./bin/cat./bin/dmesg./bin/hostname等 如何查看这些二机制文件: xxd.hexdump 参考 ...

  2. CentOS7 docker.repo 用阿里云Docker Yum源

    yum安装软件的时候经常出现找不到镜像的情况 https://download.docker.com/linux/centos/7/x86_64/stable/repodata/repomd.xml: ...

  3. [Javascript] Replicate JavaScript Constructor Inheritance with Simple Objects (OLOO)

    Do you get lost when working with functions and the new keyword? Prototypal inheritance can be compl ...

  4. JQuery插件ajaxFileUpload 异步上传文件

    一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事 ...

  5. Accelerated processing unit

    http://en.wikipedia.org/wiki/Accelerated_processing_unit Accelerated processing unit From Wikipedia, ...

  6. &lt;十二&gt;读&lt;&lt;大话设计模式&gt;&gt;之状态模式

    对于状态模式,<<大话设计模式>>是以人从上班到下班到加班的状态来展开讲述的.状态模式事实上就是某一个对象在某个过程或者时间的一个状态记录,可是这个状态的顺序不能发生变化.在程 ...

  7. DRF之视图组件 三次封装

    1.为什么要进行封装 1.1 在处理表的时候,如果有几十张表都需要增删改查查时,如果每一张表都写这些方法,会让代码显得冗余,所以需要将这些方法进行封装,然后不同的表都去继承这写方法.(这是思路) 1. ...

  8. Xamarin Android 记事本(三)删改

    这篇我就不做太多的说明了,数据操作之前也都举过例子了,这里就直接贴出删除和修改的代码. public override bool OnOptionsItemSelected(IMenuItem ite ...

  9. debian iptables持久化

    1 保存iptables iptables-save > /etc/iptables.rules   2 创建启动文件 touch /etc/network/if-pre-up.d/iptabl ...

  10. 正则表达式pattern的匹配格式

    0> 匹配 -------------------------------------------------------------------------------- (pattern)  ...