一:Django项目创建步骤:

方式1:命令创建:

进入指定目录

C:\Users\bing>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})

Django框架(二)的更多相关文章

  1. django框架<二>

    django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射 ...

  2. Django框架(二) MTV模型简介

    MTV模型 Django的MTV分别代表 Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM) Template(模板):放所有的html文件 模板语法:目的是将白变量(数据库的内 ...

  3. 第三百二十一节,Django框架,发送邮件

    第三百二十一节,Django框架,发送邮件 全局配置settings.py EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' ...

  4. 第三百二十节,Django框架,生成二维码

    第三百二十节,Django框架,生成二维码 用Python来生成二维码,需要qrcode模块,qrcode模块依赖Image 模块,所以首先安装这两个模块 生成二维码保存图片在本地 import qr ...

  5. 二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  6. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = ...

  7. Django框架之图书管理系统(二)

    该篇文章介绍多对多的关系介绍 一.数据库设计 一个作者对应多个书籍 一个书籍对应多个作者 总结也就是多对多之间的关系 通过模型类创建多对多之间的关系表的时候,Django框架通过ORM创建三个表,分别 ...

  8. Django学习(二) Django框架简单搭建

    为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...

  9. Django框架介绍(二)

    1.MVC框架和MTV框架 MVC全名model view controller,是软件工程中的一种软件架构模式,把软件分为三个基本部分:模型(model).视图(view)和控制器(controll ...

随机推荐

  1. 维多利亚的秘密 golang入坑系列

    原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...

  2. python代码结构

    1. 使用#单行注释,使用'''...'''多行注释 2. 使用连接符\来把一行过长的代码分为多行 3. 用缩进来控制代码块,推荐使用PEP8缩进风格,即四个空格 4. if ...: elif... ...

  3. Visual Studio 2012的Windows Service服务安装方式

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...

  4. Phpstorm 换行设置(复制 http://jingyan.baidu.com/article/86fae346b2cb673c49121ad3.html)

    很多时候代码太长超出了屏幕的宽度,默认情况下没有自动换行的,我们需要把光标往后挪,才能看到后面代码,显得略为蛋疼,我个人比较喜欢能够自动换行. 下面就说下Phpstorm里如何默认开启自动换行(use ...

  5. LeetCode:简化路径【71】

    LeetCode:简化路径[71] 题解参考天码营:https://www.tianmaying.com/tutorial/LC71 题目描述 给定一个文档 (Unix-style) 的完全路径,请进 ...

  6. iOS消息推送原理

    推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]): ...

  7. VS2012安装完成之后,用自带的Blend无法创建WPF项目,打开WPF项目无法设计

    Visual Studio 2012安装完成之后, 打开自带的Blend for Visual Studio 无法创建新的WPF或者Silverlight项.打开WPF项目无法编辑的原因: 1.VS自 ...

  8. DateTable To Json

    private string aaaa(DataTable dt) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerial ...

  9. cocos2d-x与着色器设计--入门篇(游云凌天原创)

    http://blog.csdn.net/danjinxiangsi/article/details/43949955 着色器(Shader)应用与计算机图形学领域,指一组提供计算机图形资源在渲染时执 ...

  10. mysql 5.6 设置root初始密码正确步骤,避免入坑

    http://blog.csdn.net/lw_power/article/details/47368167