博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django框架(二)
阅读量:6441 次
发布时间:2019-06-23

本文共 4465 字,大约阅读时间需要 14 分钟。

一: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对象
输出:
,
,
,
]> user_list = models.UserInfo.objects.all()  查所有员工表信息print(user_list) 输出:
,
]>

 

# 数据库相关操作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})

 

转载于:https://www.cnblogs.com/bingabcd/p/7066170.html

你可能感兴趣的文章
mysql 主从备库重起初始化relay log 失败的处理
查看>>
解决eclipse中打开xml文件时不显示namespace标签的问题
查看>>
vue教程推荐
查看>>
java基础:==、equals()和hashcode()
查看>>
Mariadb安装、Apache安装
查看>>
输出有效成绩的前三名
查看>>
spark 机器学习分类
查看>>
linux系统管理技巧-日常基础命令三
查看>>
11.25 配置防盗链 11.26 访问控制Directory 11.27 访问控制FilesMat
查看>>
Python 回调和首参数绑定
查看>>
今天的学习
查看>>
美团点评基于 MGR 的 CMDB 高可用架构搭建之路
查看>>
Kafka如何做到1秒处理1500万条消息?
查看>>
设计模式“6”大原则!
查看>>
Nginx可以做什么?看完这篇你就懂了
查看>>
【C++】智能指针简述(四):shared_ptr
查看>>
three.js入门(三):点光源+动画的实现
查看>>
2019年最炙手可热的大数据行业学习路线指导
查看>>
云速建站:关于企业版的几点说明
查看>>
Xcode的常用快捷键
查看>>