django上课笔记1-目录介绍-路由系统-ORM操作
一、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操作的更多相关文章
- [oldboy-django][2深入django]django目录说明 + 路由系统
django project目录说明 project - app01 -- admin.py #django自带后台管理 -- apps.py #app01配置文件 -- models.py #编写类 ...
- django上课笔记3-ORM补充-CSRF (跨站请求伪造)
一.ORM补充 ORM操作三大难点: 正向操作反向操作连表 其它基本操作(包含F Q extra) 性能相关的操作 class UserInfo(models.Model): uid = models ...
- Django中的app及mysql数据库篇(ORM操作)
Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都 ...
- python web框架 Django的APP以及目录介绍 django 1.11版本
如果有很多业务请求函数 应该放在app目录 很多业务放在主站上 当用户一点跳到分站 例如 一个项目叫运维平台 他的业务 有资产管理 私有云 监控 不同业务线 chouti项目 - chouti - ...
- 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 ...
- python web框架 Django的APP以及目录介绍 2
app: migrations 数据修改表结构 admin Django为我们提供的后台管理 apps 配置当前app models ORM,写指定的类 通过命令可以创建数据库结构 tests 单元测 ...
- Crusher Django 学习笔记3 学习使用模板系统
http://crusher-milling.blogspot.com/2013/09/crusher-django-tutorial3-using-template.html 顺便学习一下 goag ...
- django上课笔记6-MVC,MTV架构-中间件-初识Form组件
一.MVC,MTV架构 models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC models(数据库,模型) templates(htm ...
- django上课笔记5-FK关联
一.FK关联 FK关联 url.py里 from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r' ...
随机推荐
- (CF)Codeforces445A DZY Loves Chessboard(纯实现题)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:http://codeforces.com/problemset/pro ...
- 在智能手机上跟踪ADS-B系统的飞机航线信息
飞机飞行的中断可能会给航空公司造成数十亿美员的损失,但即便如此大多数现代商业航班仍旧依赖于存有严重安全问题的空中交通管制系统.到2020年,这些系统将会被升级为一个被称之为NextGen的系统,该系统 ...
- $.ajax里一个中文全角逗号引发的惨案
昨天,在制作一个页面时,突然发生一件不可思议的事情--JS失效了! 确实让人匪夷所思,我记得饭前还是正常运作的. 于是慢慢的缩小范围,把下午刚加的语句删掉,删完了页面就正常了. 于是被删除的这部分代码 ...
- ZOJ ACM 1314(JAVA)
昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...
- Android使用procrank和dumpsys meminfo 、top分析内存占用情况
如果你想查看所有进程的内存使用情况,可以使用命令procrank.dumpsys meminfo查看,当然也只可以过滤出某个进程如:dumpsys meminfo | grep -i phone 先来 ...
- 多重继承下的virtual functions
有如下图所示的继承关系: 有如下代码示例: 在早期的未符合c++标准的的编译器上是会报错的,因为对于clone()函数来说,编译器不知道怎么处理处理.但是时至今日c ...
- JavaScript你所不知道的困惑(2)
困惑一: var obj1 = new Object(); var obj2 = obj1; obj1.name = "阳光小强"; alert(obj2.name); //输出结 ...
- HDU 5335 Walk Out(多校)
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- IPv4与IPv6数据报格式
IPv4: IPv4数据报中的字段: 版本号:规定了数据报的IP协议版本,通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,因为不同IP版本使用不同的数据报格式. 首部长度:IPv4数据报可 ...
- Linux下VLAN功能的实现 (转)
1.Linux网络栈下两层实现 1.1简介 VLAN是网络栈的一个附加功能,且位于下两层.首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去.下两层涉及到具体的硬件 ...