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")
posted @ 2019-08-13 19:41  海森t  阅读(32)  评论(0)    收藏  举报