Django 08.13
路由系统:
1.创建app
a.使用pycharm创建Django的时候,加上app的名称;
b.python manage startapp app的名称;
2.路由的分组:
a.将业务逻辑写入到app中的views中
#urls.py
from app01 import views
urlpaterns = [
# url(r'^admin/', admin.site.urls),
url(r'^text',views.test)
]
b.使用include来进行app分组;
# urls.py
from django.conf.urls import url, include
urlpatterns = [
url(r'^classes/', include("classes.urls")),
]
在其他剩余的app中,添加urls.py文件,以classes为例:
from django.conf.urls import url
from classes import views
urlpatterns = [
url(r'^get_classes/',views.get_classes)
]
在这个app的views中,添加业务逻辑处理函数,以classes为例:
from django.shortcuts import render,HttpResponse
#Create your views here.
def get_classes(request):
return HttpResponse('classes list')
2.路由的分发
正则表达式匹配:
from django.conf.urls import url
from django.contrib import admin
from test import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/(\w+)/(\w+)/', views.test),
url(r'^test1/(?P<id>\w+)/(?P<name>\w+)/', views.test1),
]
#views.py
from django.shortcuts import HttpResponse
# Create your views here.
def test(request,id,name):
print(id,name)
return HttpResponse("test")
def test1(request,name,id):
print(id,name)
return HttpResponse("test1")
#注意:
#如果没有?P的约束, 传参的时候, 会根据顺序来获取参数对应的值
#而如果有约束的话, 传参的时候, 会固定的将获取的值传给所对应的的约束
自定制404notfound的页面:
from django.contrib import admin
from test import views
urlpatterns = [
url(r'^test/(\w+)/(\w+)/', views.test),
url(r'^test1/(?P<id>\w+)/(?P<name>\w+)/', views.test1),
url(r'^test$',views.test1),
url(r'^',views.not_found),
]
def not_found(request):
return HttpResponse("404 NOT FOUND")
反向路由解析:
#urls.py:
urlpatterns = [
url(r'^login/$', views.login, name='xxx'),
]
#views.py
def login(request):
return render(request,"login.html")
#login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="{% url 'xxx' %}" method="post">
<input type="text">
</form>
</body>
</html>
FBV (function based views)
使用函数处理业务逻辑
CBV(class based views)
使用类处理业务逻辑
#urls.py:
urlpatterns = [
url(r'^login/', views.Login.as_view()),
]
#views.py
from django.views import View
class Login(View):
def get(self,request):
return render(request,"login.html")
def post(self,request):
pass
当请求过来的时候,会优先判断你的请求方法是GET还是POST,如果是GET请求的话,走GET函数,反之,走POST函数.
HTTP请求方法:
'get':获取信息的;
'post':提交数据用post方式
'put':更新数据
'patch':部分更新
'delete':删除
form表单的方式,只支持GET/POST
ajax的方式:全部支持
type:"POST"、"get"、"delete"
django的orm(模型model)
1.创建model模型的步骤
a.需要创建一个数据库;
b.settings中配置连接;
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3', ### 非常小型的文件数据库
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', ## 数据库名称
'USER': 'root',
'PASSWORD': '', ## 安装 mysql 数据库时,输入的 root 用户的密码
'HOST': '127.0.0.1',
}
}
c.在对应的app中的__init__文件下面:
import pymysql
pymysql.install_as_MySQLdb()
d.INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
'classes'
]
创建表
from django.db import models
# Create your models here.
class UserInfo(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32,null=True)
age = models.CharField(max_length=32,null=True)
将类转换成实际的表:
python manage.py makemigrations #生成迁移文件
python manage.py migrate 生成实际的表
from test import models
def ormtest(request):
#单标的查询:
# res = models.UserInfo.objects.all()
# #<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
# for obj in res:
# print(obj.username,obj.id,obj.age)
# res = models.UserInfo.objects.values("username","age")
# #<QuerySet [{'username': 'zekai', 'age': '18'}, {'username': 'chunge', 'age': '23'}, {'username': 'eagon', 'age': '33'}, {'username': 'lxxx', 'age': '18'}]>
# for obj in res:
# for k,v in obj.items():
# print(k,v)
# res =models.UserInfo.objects.values_list("username","age")
# #<QuerySet [('zekai', '18'), ('chunge', '23'), ('eagon', '33'), ('lxxx', '18')]>
# for obj in res:
# print(obj)
# res = models.UserInfo.objects.first()
# #UserInfo object
# print(res.username)
# res =models.UserInfo.objects.filter(id__gt=3).all()
# #<QuerySet [<UserInfo: UserInfo object>]>
# print(res)
#增加数据:
# models.UserInfo.objects.create(username='kkk',age=12,ut_id=3)
# UserInfo = {"username":"ddd","age":23,"ut_id":3}
# models.UserInfo.objects.create(**UserInfo)
#删除:
# models.UserInfo.objects.filter(id=3).delete()
#更新:
models.UserInfo.objects.filter(id=3).update(username="egon",age=18)
return HttpResponse("ok")

浙公网安备 33010602011771号