一:Django项目创建步骤:
方式1:命令创建:
进入指定目录
C:Usersing>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'), )
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', ], }, }, ]
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})