django知识

1创建项目
再工作空间目录下执行 django-admin statrproject
2.创建app
在项目的目录下执行 python manage.py startapp
3.将自己创建的app配置到项目中
在项目settings.py添加
#配置需要的app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp001', 自己加的
]
4.写程序
在app运用中定义视图函数 views.py
Def fun(req):
#可执行代码
Return render/redirect()
from django.shortcuts import render

# Create your views here.
'''
定义视图函数
'''
def test(request):
print('123456')
return render(request,'test.html')

5.在项目下的urls文件中配置url
1.文件中引入自己的app的views模块
from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from myapp001 import views

urlpatterns = [
url(r'^admin/', admin.site.urls),
#设置自己的urls
path('test/', views.test)
]

启动服务 python manage.py runserver
6.访问自定义视图函数
http://127.0.0.1:8080/url
7.模版页面
在app应用中创建templates文件夹,再此文件夹中创建html文件

1.在app下templates下创建一个login.html文件如下
2.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" methon="get">
帐号: <input type="text" name="userAcc" PLACEHOLDER="请输入帐号" required>
<br>
密码: <input type="password" name="userpass"><br>
<input type="submit" value="登入">
</form>
</body>
</html>
3.然后在APP的views.py下
4.def loginpage(req):
return render(req,'login.html')
'''
页面访问的方法
pageName 页面名 模版名
访问此函数,地址栏有对应的参数值 restFulurl
'''
'''def topage(request,pageName):
return render(request,pageName)
'''
urlpatterns = [
url(r'^admin/', admin.site.urls),
#设置自己的urls

path('test/', views.test),
path('page/<str:pageName>', views.topage),
path('loginpage/', views.loginpage),
]
两个方式访问http://127.0.0.1:8000/loginpage/
http://127.0.0.1:8000/page/login.html

2.数据交互
页面提交方式是get
<form action="/user/login" method="get">
帐号: <input type="text" name="userAcc" PLACEHOLDER="请输入帐号" required>
<br>
密码: <input type="password" name="userPass"><br>
<input type="submit" value="登入">
</form>
Views视图函数:
#登入操作
def login(req):
#获得客户提交的数据
userAcc= req.GET.get('userAcc',None)
userPass= req.GET.get('userPass',None)
print(userAcc+'===='+userPass)
if 'admin'== userAcc and '123456'== userPass:
print('帐号密码存在')
return render(req, 'test.html')
return render(req, 'login.html')
Get 1.表单提交 2.访问超链接 3地址栏直接访问
Post form表单提交 django中post提交防止跨域请求csrf_token
如果提示APPEND_SLASH
错误是在项目setting中加入
USE_TZ = True
APPEND_SLASH=False
Post提交表单中加入
{% csrf_token %}
<form action="/user/reg/" method="post">
{% csrf_token %}
帐号: <input type="text" name="userAcc" PLACEHOLDER="请输入帐号" required>
<br>
密码: <input type="password" name="userPass"><br>
确认密码: <input type="password" ><br>
地址:<select name='addr'>
<option value='北京'>北京</option>
<option value='上海'>上海</option>
<option value='广东'>广东</option>
<option value='湖北'>湖北</option>
</select>
<select name='addr'>
<option value='北京'>北京</option>
<option value='上海'>上海</option>
<option value='广州'>广东</option>
<option value='武汉'>湖北</option>
</select>
<input type="submit" value="注册">
</form>

Views中写:再urls文件配置path
path('user/reg/', views.reg),
def reg(req):
userAcc = req.POST.get('userAcc')
addr = req.POST.getlist('addr')
print(userAcc)
print(addr)
return render(req, 'login.html')


请求转发响应重定向:
def testrender(req):

context=dict()#字典类型
context['name']='wenkeliang'
context['hobby']=['吃','玩游戏']
return render(req,'testrender.html',context=context) #请求转发给客户端传递数据

#重定向
def testredirect(req):
return redirect('/page/login.html')
请求转发可以传递数据到模版页面最后展示给客户端
页面中testrender.html
<body>
请求转发
{{ name }}<br>
{{ hobby }}
</body>


Session设置
Session使用djnago依赖于表
执行python manage.py migrate
Setting中

SESSION_COOKIE_AGE = 60 * 30 #30分钟
SESSION_EXPIRE_AT_BROWSER_CLOSE = True #浏览器关闭时SESSION失效

Session中存储数据
Req.session[‘key’]=值
Html模版中显示数据
模版页面取数据 {{request.session.key}}
Views中获得session中的数据 request.session.get(‘key’)

模版 如何显示数据
常用标签 for if标签 ifequals ifnotequals include

1.views中请求转发
1.'''
模版中复杂数据展示
'''
def testTemplate(req):
cont=dict() #创建字典类型
cont['userinfo']={'name':'温科良','age':'75','sex':'女'}
cont['infos']=[{'name':'温科良','age':'30','sex':'男','hobby':['吃','玩游戏']},
{'name':'张三','age':'30','sex':'男','hobby':['吃','爬山']},
{'name':'李四','age':'30','sex':'男','hobby':['吃','睡觉','看电影']}]
#cont={'userinfo':{'name':'温科良','age':'30','sex':'男'},'infos'=[{'name':'温科良','age':'30','sex':'男','hobby':['吃','玩游戏']},
# {'name':'张三','age':'30','sex':'男','hobby':['吃','爬山']},
# {'name':'李四','age':'30','sex':'男','hobby':['吃','睡觉','看电影']}]
return render(req,'testTemplate.html',context=cont)
2.模版中显示
<body>
显示数据<br>
{{userinfo}}<br>
{# 显示字典中数据 #}
姓名 {{userinfo.name}} 年龄 {{userinfo.age}}性别 {{userinfo.sex}}
{# 显示list类型数据 #}<br>
<table border="1">
<tr><td>姓名</td><td>年龄</td><td>性别</td><td>hobby</td></tr>
{% for us in infos %}
<tr><td>{{us.name}}</td><td>{{us.age}}</td><td>{{us.sex}}</td><td><!--{{us.hobby}} --> {% for ho in us.hobby %}{{ho}}.{%endfor%}</td></tr>
<br>
{%endfor%}

</table>
<hr>
---------------------if--------------------
{{userinfo.sex}}<br>

男<input type="radio" name="sex" {% if userinfo.sex == "男" %} checked {%endif%}>
女<input type="radio" name="sex" {% if userinfo.sex == "女" %} checked {%endif%}><br>
年龄范围 {{userinfo.age}}<br>
{% if userinfo.age >= 60 %}
老年人
{% elif userinfo.age >= 30 and userinfo.age <= 60 %}
中年人
{%else%}
青年
{%endif%}
</body>
</html>

模型Model 使用mysql
1.安装mysql相关模块 pip install pymysql
2.djnago项目setting文件中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'hots':'106.55.94.219',
'port':3306,
'password':'wenkeliang1020',
'NAME': 'good',
}
}

3.写模型对应
#定义模型对象
class userinfo(models.Model):
'''
1. 用户
列 类型 需求
用户编号 varchar pk
用户帐号 varchar unique
用户密码 varchar
生日 date
性别 varchar
'''
#属性定义
userid=models.BigIntegerField(primary_key=True) #设置主键
useraccount=models.CharField(max_length=50,unique=True)
userpass=models.CharField(max_length=30)
userbirth=models.DateField()
usersex=models.CharField(max_length=4)
class Meta:
db_table='userinfotable'
pass
在项目文件下__init__.py
import pymysql
pymysql.install_as_MySQLdb()

4.创建模型对象
Python manage.py makemigrations
4.创建表
Python manage.py migrate
多对多关系创建
1.from django.db import models

# Create your models here.
#定义模型对象
class userinfo(models.Model):
'''
1. 用户
列 类型 需求
用户编号 varchar pk
用户帐号 varchar unique
用户密码 varchar
生日 date
性别 varchar
'''
#属性定义
userid=models.BigIntegerField(primary_key=True) #设置主键
useraccount=models.CharField(max_length=50,unique=True)
userpass=models.CharField(max_length=30)
userbirth=models.DateField(null=True)
usersex=models.CharField(max_length=4)

pros=models.ManyToManyField('Product')#用户和商品多对多管

class Orderinfo(models.Model):
'''
3. 订单
列 类型 需求
订单编号 varchar pk
下单日期 datatime
订单金额 float
用户编号 fk


'''


orderid = models.CharField(primary_key=True, max_length=100)
orderDate = models.DateTimeField(auto_now=True)
orderMon = models.FloatField()
userinfo = models.ForeignKey(userinfo, on_delete=models.CASCADE) # 设置外键关联
#class shopinginfo(models.Model):
'''
2.商品
列 类型 需求
商品编号 varchar pk
商品名称 varchar
商品单价 float
商品图片 varchar
'''
#shopingid=models.CharField(primary_key=True, max_length=100)
#shopingmingcheng=models.CharField(max_length=50,unique=True)
#shopingdanjia=models.FloatField(
#商品模型
class Product(models.Model):
ProId=models.BigAutoField(primary_key=True) #商品编号 自增
ProName=models.CharField(max_length=200)#商品名称
ProPrice=models.FloatField(default=0.0)#商品单价
ProImg=models.CharField(max_length=200)#商品图片
#用户购物车 m:m关系设置

第二种

from django.db import models

# Create your models here.
#定义模型对象
class userinfo(models.Model):
'''
1. 用户
列 类型 需求
用户编号 varchar pk
用户帐号 varchar unique
用户密码 varchar
生日 date
性别 varchar
'''
#属性定义
userid=models.BigIntegerField(primary_key=True) #设置主键
useraccount=models.CharField(max_length=50,unique=True)
userpass=models.CharField(max_length=30)
userbirth=models.DateField(null=True)
usersex=models.CharField(max_length=4)

class Orderinfo(models.Model):
'''
3. 订单
列 类型 需求
订单编号 varchar pk
下单日期 datatime
订单金额 float
用户编号 fk


'''


orderid = models.CharField(primary_key=True, max_length=100)
orderDate = models.DateTimeField(auto_now=True)
orderMon = models.FloatField()
userinfo = models.ForeignKey(userinfo, on_delete=models.CASCADE) # 设置外键关联
#class shopinginfo(models.Model):
'''
2.商品
列 类型 需求
商品编号 varchar pk
商品名称 varchar
商品单价 float
商品图片 varchar
'''
#shopingid=models.CharField(primary_key=True, max_length=100)
#shopingmingcheng=models.CharField(max_length=50,unique=True)
#shopingdanjia=models.FloatField(
#商品模型
class Product(models.Model):
ProId=models.BigAutoField(primary_key=True) #商品编号 自增
ProName=models.CharField(max_length=200)#商品名称
ProPrice=models.FloatField(default=0.0)#商品单价
ProImg=models.CharField(max_length=200)#商品图片
#用户购物车 m:m关系设置
class UserGoods(models.Model):
user=models.ForeignKey(userinfo,on_delete=models.DO_NOTHING)
pro=models.ForeignKey(Product,on_delete=models.DO_NOTHING)
Ajax
Views:

前端:

Json格式获取

原文地址:https://www.cnblogs.com/wenyeqing/p/13581330.html