路由和orm

路由:
"""
路由后面的斜杠要加都加,要不加都不加
"""
#基础一对一
path('cmdb/', views.index),
path('cmdb/login/', views.login),
path('cmdb/home/', views.home),

# CBV的路由书写方式
path('cmdb/welcome/', views.Welcome.as_view()),

#利用正则,多个url对应一个函数 需要from django.urls import re_path
re_path('cmdb/detail-(\d+).html', views.detail),
re_path('cmdb/detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),

#用name字段程序更加灵活,模版文件里用{% url 'r1' %},修改url的时候的不用改模版地址
path('cmdb/host/', views.host, name="r1"),

"""
模版文件里用{% url 'r1' num1 num2 %}
{% url 'r1' pid=num1 uid=num2 %}
如果要获取完整url,可以利用<form action="{{ request.path_info }}">
request.path_info获取当前url
"""
re_path('cmdb/host-(\d+)-(\d+)', views.host, name="r2"),

"""
如果要根据接收的路由生成新的路由
from django.urls import reverse
可根据路由是位置参数还是关键字参数,选择使用args还是kwargs
v = reverse('route_name', args=(3, 5), kwargs={'nid':3, 'uid':5})
"""
re_path('cmdb/host-(?P<nid>\d+)-(?P<uid>\d+)', views.host, name="r3"),

--------------------
路由分发:
#app01的url请求分发到app01下面的urls路由文件里
#app02的url请求分发到app02下面的urls路由文件里
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),
]
Model数据库操作:
ORM分为两种,db first和code first
db first: 先执行原生sql语句创建表,再用对象去操作
code first: 先创建类,然后用类去创建表和操作数据库 如:django和sqlalchemy
数据库接口在models.py里
一、创建类
from django.db import models
# Create your models here.

class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
二、注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01', #增加此项
]
三、执行
python manage.py makemigration #在migrations里面创建记录
python manage migrate #根据记录创建表结构

注意如果要用mysql:
django默认使用mysqldb模块连接mysql,python3没有
要在project同名目录下的__init__.py里面加上如下:
import pymysql
pymysql.install_as_MYSQLdb()
四、外键操作
创建表
class Users(models.Model):
uid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
user_group = models.ForeignKey('UserGroup', on_delete=models.CASCADE)

class UserGroup(models.Model):
gid = models.AutoField(primary_key=True)
section = models.CharField(max_length=32)
创建数据
#创建部门表数据
# models.UserGroup.objects.create(section='技术')
# models.UserGroup.objects.create(section='行政')
# models.UserGroup.objects.create(section='财务')
#创建职员表数据,user_group是django类,数据库给外键自动增加_id后缀
# models.Users.objects.create(name='Eric', user_group_id=1)
# models.Users.objects.create(name='Alice', user_group_id=2)
# models.Users.objects.create(name='Tom', user_group_id=3)
关联查询
user_list = models.Users.objects.all()
for i in user_list:
# i.user_group是UserGroup object
print(i.uid, i.name, i.user_group.section)

猜你喜欢

转载自www.cnblogs.com/ericbai/p/9364118.html