Djiango
1.安装Djiango
pip install Djiango
Python的主体框架
C:python39 -python.exe -Scripts -pip.exe0 -djiango-admin.exe 【工具,用来创建djiango项目中的文件和文件夹】 -Lib -内置模块 -site-packages -openpyxl -flask -djiango 【框架的源码】
2.创建Djiango的项目
djiango中项目会有一些默认的文件和文件夹
2.1在终端
打开终端
进入djiango的工作空间
执行命令创建项目
“C:\python39\Scripts\djiango-admin.exe” startproject “项目名称”
如果"C:\python39\Scripts" 已经加入了系统环境变量 直接 djiango-admin startproject 项目名称
3.pycharm创建djiango项目
选好解释器,左上角创建Djiango项目
特殊说明: 命令行,创建的项目是标准项目 pycharm,是在标准上加了点东西 1.多创建了一个templates目录(需要删除) 2.并且在标准的settings里面多加了一点东西(里面导入的os作用是使app可以调用外部templates里面的html页面 如果加上了 [os.path.join[(BASE_DIR,"templates"])],则会优先从根目录寻找html
创建后项目(myprojects)目录(结构树)讲解:
-
myprojects manage.py 【项目的管理,启动项目,创建app,数据管理】【不要动】 myprojects __init__.py settings.py 【项目的配置文件,连接数据库的信息,创建app信息】【常常操作文件】 urls.py 【URL和函数的对应关系,要把路径都写在这个里面】【常常操作文件】 asgi.py 【接受网络请求】(不要动,同步式接收) wsgi.py 【接受网络请求】(不要动,异步式接收)
4.APP创建和APP目录讲解
-项目 -app,用户管理【表结构,函数,HTML模板,CSS】 -app,订单管理【表结构,函数,HTML模板,CSS】 -app,后台管理【表结构,函数,HTML模板,CSS】 -app,网站 【表结构,函数,HTML模板,CSS】 -app,API 【表结构,函数,HTML模板,CSS】 简单的开发用不到多app,一般情况下,项目创建一个app就可以了
创建app的命令:
python manage.py startapp app01 python manage.py startapp app02 python manage.py startapp app03
创建app后,会生成以下文件
├─app01 │ ├─ __init__.py │ ├─ admin.py 【固定,不用动】djiango默认提供admin的后台管理 │ ├─ apps.py 【固定,不用动】app启动类 │ ├─ migrations 【固定,不用动】数据库变更记录 │ └─ __init__.py │ ├─ models.py 【***重要***】对数据库做操作用的 │ ├─ tests.py 【固定,不用动】单元测试用的,一般不测试就不用 │ └─ views.py 【***重要***】存写函数的 ├─manage.py └─ myproject2 ├─ __init__.py ├─ asgi.py ├─ wsgi.py ├─ settings.py └─ urls.py 【***重要***】 【URL->函数】
5.上手
(1)创建好app后,需要注册app
在settings.py里面注册app 去找INSTALLED_APPS,在内容中加入app01.apps.App01Config 去调用apps.py里面App01config的类,作为app的启动类
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", # 注册app (对于去寻找html,这个也是按照app01,app02,app03的顺序去寻找的) "app01.apps.App01Config", ]
(2)编写url和函数的对应关系(urls.py,view.py)
urls.py 【写访问路径url目录和函数的对应关系】 view.py 【写对应路径函数的具体内容】
from django.urls import path # 导入执行的函数 from app01 import views urlpatterns = [ # path("admin/", admin.site.urls), # 添加URL和函数的对应关系 #当用户访问到www.xxx.com/index 时,会调用跳转到这个views.index函数 path("index/", views.index), path("user/list/", views.user_list), path("user/add/", views.user_add), path("tpl",views.tpl), path("news/",views.news), ]
在views.py中需要写出对应的函数方法,比如登录index页面对应的方法 def index(request): return render(request,"user_index.html") # reder(request,"xxx.html")表示页面进入到一个页面 # 在当前的app文件夹下写一个templates,在templates文件夹下创建一个html # 用过reder函数 使其去app目录下的templates目录去寻找user_index.html(根据app注册顺序,逐一的去他们的templates目录中找,按顺序一个一个找)
(3)启动djiango
命令行方式启动djiango
python manage.py runserver
pycharm项目启动
选择自己的项目(项目名)
6.静态文件
在开发过程中,一般将:图片\CSS\JS\插件(plugins) 都会当作静态文件处理。
(1)static目录的创建
引用静态文件的特点
7.djiango模板语法
#在views.py里面定义一个tpl方法的对应的页面 def tpl(request): name="韩超" roles=["管理员","CEO","保安"] user_info = {"name":"郭子","salary":"10000","role":"CEO"} data_list = [{"name":"郭子","salary":"10000","role":"打工仔"}, {"name":"远子","salary":"100000","role":"CEO"}, {"name":"麻子","salary":"1000000","role":"老总"}] return render(request,'tpl.html',{"n1:name"},{"n2:roles"},{"n3:user_info"},{"n3:data_list"}) #在对应的tpl页面调用 <div>{{n1}}</div> <div>{{n2}}</div> <div>{{n2.0}}</div> <div>{{n2.1}}</div> <div>{{n2.2}}</div> <div>{% for item in n2 %} <span>{{ item }}</span> {% endfor %} {% for k,v in n3.items %} <li>{{ k }}={{ v }}</li> {% endfor %} {% for item in n3.keys(或者values) %} <li>item</li> {% endfor %} <div>{{ n3 }}</div> <div>{{ n3.name }}</div> <div>{{ n3.salary }}</div> <div>{{ n3.role }}</div> <div>{{ n4.0.name}}</div> <div>{{ n4.0.salary }}</div> <div>{% for item in n4 %} <div>{{ item.name }} {{ item.salary }}</div> {% endfor %} </div> #html里面的条件语句 {% if n1 == "郭子" %} <h1>你尽然知道郭子最帅,你真棒!</h1> {% elif n1== "xxx" %} <h1>你猜对了,郭子最帅!!!</h1> {% else %} <h1>你猜错了,分明郭子最帅!!!</h1> {% endif %} #页面显示 韩超 ["管理员","CEO","保安"] 管理员 CEO 保安 管理员 CEO 保安 {'name': '郭子', 'salary': '10000', 'role': 'CEO'} 郭子 10000 CEO name=郭子 salary=10000 role=CEO 郭子 10000 郭子 10000 远子 100000 麻子 1000000
8.请求和响应
request:
def something(request) #request是一个对象,封装了用户发送过来的所有请求相关的数据 # 1.获取请求方式 GET/POST 两种模式 print(request.method) # 2.在URL上传递一些值 /something/?n1=123&n2=999 print(request.GET) # 3.在请求体中提交数据 print(request.POST) # [响应]4.HttpResponse("返回内容"),内容字符串内容返回给请求者。 # return HttpResponse("返回内容") # [响应]5.读取HTML的内容 + 渲染(替换) -> 字符串, 返回给用户浏览器。 # return render(request,'something.html',{"title:":"来了"}) # [响应] 让浏览器重定向到其他页面 return redirect("http://www.baidu.com")
重定向
9.数据库操作
mysql数据库 + pymysql(pymysql可以对mysql进行增删改查)
Djiango开发操作数据库更简单,内部提供了ORM框架。(ORM框架相当于是一个翻译器,将代码转换成sql语句后,交给mysqlclient等pip下载的模块去处理执行sql语句,从而增删改查,修改数据库)
9.1安装第三方模块
pip install mysqlclient
9.2 ORM
作用: 1.创建、修改、删除数据库中的表。(不用写sql语句,但是无法创建数据库) 2.操作表中的数据。(不用写sql语句) insert into ... update ... select ...
(1)创建sql数据库
create database djiangoproject DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
(2)dijiango项目配置数据库
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "USER": "root", "PASSWORD" : "123456", "HOST" : "127.0.0.1", "PORT" : "3306", ##数据库名 "NAME" : "djiangoproject" } }
(3)djiango操作表
创建表
删除表
修改表
#在models.py文件中写入: from django.db import models class User(models.Model): username = models.CharField(max_length=100, unique=True) password = models.CharField(max_length=32, unique=False) email = models.EmailField() age = models.IntegerField() #系统会自动生成对应的表 #通过生成一个类,来生成一个表 ''' creat table app01_user( id bigint auto_increment primary key, name varchar(100), password varchar(32), age int, email email ) '''
执行命令开始执行生成对应的表(1.在确保已经安装了mysqlclient包的情况下)(2.可以先pwd查看路径)(3.保证app01已经在settings.py里面注册了)
python manage.py makemigrations
python manage.py migrate
添加表
#简单的来说就是想添加表,就直接在models.py里面直接添加类,类继承models模块里面的Model用来创建表 from django.db import models class userinfo(models.Model){ username = models.CharField(max_length=100,unique=Ture) } #而在原有已经创建的表中添加字段,就需要添加一个默认值来匹配表中已有字段的那一列,eg: #①已经执行过上面的命令后又添加了一个password字段,就需要default=2; #②或者设置null=True,black=True来设置这个字段可以为空也行; from django.db import models class userinfo(models.Model){ username = models.CharField(max_length=100,unique=Ture) password = models.CharField(default="xxxx",max_length=100,unique=Ture) age = models.IntegerField(null=True,black=True,max_length=100,unique=Ture) }
操作数据
修改数据
增加数据
#都是在view.py文件中进行操作的
class User(models.Model): username = models.CharField(max_length=100, unique=True) password = models.CharField(max_length=32, unique=False) email = models.EmailField() age = models.IntegerField() #对表中的数据进行操作 #新建数据 相当于数据库语句(本质) insert into app01_department(age)values(18) User.objects.create(age=18) #删除数据(直接在view.py文件中过滤删除即可) User.objects.filter(id=3).delete() User.objects.all().delete() #删除整张表所有的数据 #获取数据 QuerySet类型的 相当的于获取的是一个列表,列表里面是一行一行的数据,[行,行,行] data_list = User.objects.all(age=18) for obj in data_list: print(obj.id,obj.name,obj.password,obj.age) row_obj = User.objects.filter(id=3).first() #获取第一条数据[对象] print(row_obj.id,row_obj.name,row_obj.password,row_obj.age) #更新数据 User.objects.filter(name="郭子").updata(password="999")
前端和后端相互连接: