python中web端 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格式获取
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号