Python web学习

提交

学员管理:

      表:  班级

        学生

    老师

班级:

id  title

1    1班

2    2班

学生:

id  name  班级id(外键)

1    许    1

老师:

id    name

1    林海锋

2    郭丽

老师班级表关系:

id    老师ID  班级id

1      1        1

2      1        2

3      2        2

单表操作:

  - 增

  - 删

  - 改

  - 查


一对多操作 ()  学员管理  模态对话框  Ajax(页面不刷新的前提下,可以发数据给后台)


  PS:views中对用户提交的数据进行判断(Form组件)


  2.模态对话框

    班级管理:

      --添加  Form表单提交,页面会刷新


  $.ajax(

                    {

                        url:'/modal_add_class/',

                        tpye:'POST',

                        data:{'title':'kkkkk'},

success: function(data){

        //当服务端处理完成后,返回数据时,该函数自动调用

//data = 服务端返回的值

    console.log(data);

  }

                    }

                )




    3.Ajax(页面不刷新的前提下,可以发数据给后台)

jQuery

$.ajax({

      url:'要提交的地址’,

  type:‘POST’,//GET或者PoSt,提交方式

  data:{‘k1’:‘v1,’k2':'v2'},

  success:function(data){

//当前服务端处理完成后,自动执行的回调函数

//data返回的数据

  }


})

其他:

    1.模板语言if条件语句

2.Form表单提交,页面会刷新

3.Ajax提交页面不刷新

4.js实现页面跳转:

      location.href=“要跳转的地址”


5.

    模态对话框(Ajax)

  - 少量输入框

  - 数据少

新URL方式

  - 对于大量的数据以及操作多


1.班级:Ajax(删除,编辑)



对话框  (单表,一对多)

2.多对多

3.Bootstrap

4.font awesome

--------------------------------------------------------------------------------------------------------

    内容回顾

    1.Web框架本质

  浏览器(socket客户端)

      b。发送ip和端口    http://www.baidu.com:80/index/


  GET:

请求头

        http1.1 /index/?p=23

请求体 (无内容)

  POST:

      请求头

        http1.1 /index/?p=2

    请求体 (内容)

c。接收相应:

      普通相应:页面直接显示


  重定向:再发起一次Http请求


  服务器(socket服务端)

      a.启动并监听ip和端口,等待用户连接


  c. 接收请求进行处理,并发回

        字符串

普通返回响应头:

                Acces-Control-allow-Origin:*

Cache-Control:max-age=600

Date:Mon,

Exires:Mon,

Last-Modified:Wed

        响应体:

     

      ................

 


重定向返回响应头:(浏览器自动去跳转)

                LOCATION: ’http://www.baidu.com‘

                Acces-Control-allow-Origin:*

Cache-Control:max-age=600

Date:Mon,

Exires:Mon,

Last-Modified:Wed

        响应体:

2.DjangoWeb框架

a.创建Project

    django-admin  startproject mysite

b. 配置

    模板

静态文件

csrf


c. 路由关系

  url ->  函数

  url ->  函数

d. 视图函数

  def index(request):

    request.method

request.GET或者POST

return  HttpResponse()

return  redirect('URL')

return  render(request,'模板路径',{返回数据用于,模板渲染})

    #1.获取模板+数据,渲染

#2.HttpResponse(..)

e.模板渲染

  {{k1}}

  {{k2.0}}


  {% for i in result %}

        {{i}}

{% endfor %}

{% if 1> 2%}

{% endif %}

f.

  1)JS阻止默认事件的发生

              2)location.reload()  刷新当前界面

              3) HttpReponse(json.dumps(dfdf))  把字典转换 字符串

  4)JSON.parse()



  PS: .jQuery 事件阻止默认事件发生


          $('#addModel').click(function(){

alert(123);

return  false;

                })

    3 Ajax(jQuery)

    $.ajax({

  url:  '',

  type:  'POST',

  data: {k1:'v1'},

  dataType:'JSON',

  success.function(arg){

//arg 字符串

//JSON.parse(字符串) =》 对象

//JSON.stringify(对象)  =》 字符串

python v={'k1':'v1'}

v['k1']

前端 v={'k1':'v1'}

v.k1

console.log(arg);

  }

})


  - 增

  - 删

  - 改

  - 查



多对多操作:


  - 增

  - 删

  - 改

  - 查

Django基础 


.addmodal{

                position: fixed;    /*相对于游览器窗口来说*/

                left: 50%;

                top: 50%;

                width: 400px;

                height: 300px;

                background-color: white;

                z-index: 1000;

                margin-left: -200px;

                margin-top: -200px;

            }

1.Http请求生命周期

请求头 -》 提取URL  -》路由关系匹配  -》 函数(模板+数据,渲染)-》返回给用户(响应头,相应体)

2.def index(rquest):

  request.post.get

  request.GET

  request.method


  return render()

  return HttpReponse

  模板渲染是在后台执行


3.for

  if

  索引


  classs_id=[1,2,4]

            $.ajax({

                        url: '/modal_add_teacher/',

                        type: 'POST',

                        data: {'name':name,'classs_id':classs_id,'k2':JSON.stringify({k1:v1})},

                        traditional:true,              //如果 是列表的,ajax 发送的添加 ,不做任何处理,直接发送列表到后台

                        success:function (arg){

                            arg =JSON.parse(arg);

                            if (arg.status){

                                location.reload();

                            }else{

                                $('#addError').text(arg.message);

                            }

2.插件

  --bootstarp(一)


      --看图拷贝


  官网 bootstarp    点击Bootstrap3中文文档  -- 》  全局css样式  或者组件(f12)查看元数据




  图标插件  Font Awesome




3,目标完善学生管理系统

    a,bootstrap 一个包含css和js的一个代码库。

-样式

-响应式  当网页宽度缩小到768像素时,变小 页面做相应的变化

关键词: @media

---导航条

---栅格

@media(min-width:768px){

.container > .navbar-header,

.container-fluid > .navbar-header,

.container-fluid > .navbar-collapse {

  margin-right:0;

  margin-left:0;

}

}



 

2.完善学员管理系统

  -- 后台管理布局

  -- Django 母版:

            母版: 存放所有页面公用

子版:

3.Cookie  :

  def set_cookie(self,key,value='',

  max_age=None,

  expires=None,

  path='/',

  domain=None,

  secure=Falae,                ##https


  httponly=False              只能自http请求中传入,js代码无法获取

  );

  a.保存在用户浏览器端“键值对”。(淘宝,京东的)解决无状态的。

  b.服务端可以向用户浏览器端写cookie

  c.客户端每次请求时,会携带cookie去。(把本地相关cookie,在请求头里面)

  print(rquest.COOKIES)    读取cookie


  def li(request):

    obj = HttpResponse('ok')

obj.set_cookie('k1','v1')

return obj

或者:

    obj = redirect('/classes/')

        obj.set_cookie('ticket','abdededeede',max_age=10,path='/')  设置cookie的有效时间,单位秒

        return obj

cookie签名:

  obj.set_signed_cookie('ticket',"123",salt='jjj')



内容整理:

1.Bootstrap响应式布局: @media()

2.栅格:

3.表格

4.导航条

5.路径导航

6.fontawesome

7.布局position: absolute

8.当鼠标移动到xx样式的标签上是,其子标签.g应用一下属性

.xx:hover .g{

}

9. Django母版

{%block %}

{%endblock%}

子版 {% extends “layout.html” %

}

10.用户登录

--cookie  : 保存在浏览器端“键值对”,设置超时时间。

    -发送http请求时,在请求头中携带当前所有可访问的cookie

--写cookie

  def  index(request):

    obj = HttpResponse('')

obj.set_cookie()

取  request.COOKIES.get()

obj.set_signed_cookie()

取 request.get_signed_cookie()

project

      -app01  自己创建的目录

            --views.py

  -SQLHelper  封装SQL操作



Django:

    -  路由

-  视图函数

-  模板

-  ORM  (面向对象,操作数据库)  类 -- 表:  对象-行  pymsql连接数据库

非主流

1.创建APP

2.数据库操作

今日内容:

1.路由系统

2.视图函数  CBV(视图居于类)  , FBV(视图居于函数)

3.ORM操作

今天内容:

D:

cd 资料

D:\资料 > django-admin startproject  xie

D: \资料 >  cd  xie

D: \资料\xie > python manage.py startapp app02

project

      -- app01

      -admin    Django自带后台管相关配置

  -modal    写类,根据类创建数据库表

  -test    单元测试

  -views    业务处理   


1.路由系统

  url - >  函数


  a. /login  ->  def login


  b. /add-user/(\d+)/    -> def add-user(request,a1)   

re_path('edit/(?P\w+)/(?P\w+)/', views.edit),

def edit(request,a1,a2):

PS:

    终止符:  ^edit$

伪静态:

path('edit/(\w+).html$', views.edit),

    2.路由分发

from django.urls import path,re_path,include

urlpatterns = [

    path('admin/', admin.site.urls),

    path('app01/', include('app01.urls')),

    path('app02/', include('app02.urls')),

]


from django.urls import path,re_path,include

from app01.views import views

urlpatterns = [

  # path('admin/', admin.site.urls),

    path('index/', views.index),

    re_path('edit/(\w+)/', views.edit),

]

http://127.0.0.1:8000/app01/index/

3.反生成url   

A  \ /add-user/(\d+)/  ->  def add-user(request,a1)  name=n1

  在Python代码中

    from django.urls import reverse

v=reverse('n1',kwargs={'a1:111})

print(v)


B \ 

  html 引用别名




  正则表达式  引入变量


    01 re_path('edit/(\w+)/', views.edit,name='n2'),

02

  • {{ i }} | 编辑
  • ----------------------------------

    方  : n1 n2  n3

    陈 :  n4 n5 n6

    刘:  n5 n2 n6

    def  index(request):

        url_list= [‘n1','n2','n3']

    temp = []

    for i in url_list:

      url= reverse(i)

      tmp.append(url)

    return render(...,url_list)

    --------------------------------------------------------------------------

    html 下面用

      for url in url_list:                      等同于

       

    • ff
    •     <=>
    • ff
    •  

      ----------------------------------------------------------------------------

    二,  ORM 操作数据库


      Http请求:

          url  -》  视图(模板+数据)


      步骤:

          1.创建数据库

      2.DATABASES = {

    'default': {

    'ENGINE': 'django.db.backends.mysql',

    'NAME':'zjgis_db',

    'USER': 'root',

    'PASSWORD': 'creaway@123',

    'HOST': '172.30.78.72',

    'PORT': '13306',

    }

    }

    # 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替


                # 如下设置放置的与project同名的配置的 __init__.py文件中


                import pymysql

                pymysql.install_as_MySQLdb()

    或者window xia    where python

    cd  python 目录下 \Scripts\

    pip install mysqlclient

          4. 在app  的 models.py  里添加表 的类

      from django.db import models

    # Create your models here

    class UserGroup(models.Model):

    title=models.CharField(max_length=32)

    class UserInfo(models.Model):

    nid=models.BigAutoField(primary_key=True)

    username=models.CharField(max_length=32)

    password=models.CharField(max_length=64)

    ug=models.ForeignKey("UserGroup",null=True,on_delete=models.CASCADE)


      5.  在settings 注册 app01


    INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'app01',

    ]

    6.创建数据库表或者修改表结构 都是以下两个命令 在数据库生成表

    Terminal命令:python manage.py makemigrations

                  python manage.py migrate




      #####单表增删改查  ########################################

    #增删改查

    from app01 import models

    #新增

    # models.UserGroup.objects.create(title='销售部')

    # models.UserInfo.objects.create(username='root',password='pwd',age='18',ug_id='1')

    #查找

    # group_list=models.UserGroup.objects.all()    #取全部数据

    #group_list = models.UserGroup.objects.filter(id__gt=1) #取部分大于1

    #group_list = models.UserGroup.objects.filter(id__lt=1)  小于1

    #group_list 是QuerySet类型(列表)

    #删除数据

    # models.UserGroup.objects.filter(id=2).delete()

    #更新

    models.UserGroup.objects.filter(id=3).update(title='公共部')

    group_list = models.UserGroup.objects.all()

      ######################################################################


        ORM操作表:

              创建表

      修改表

      删除表

    操作数据行:

              增 删  改 查看



        ORM利用pymysql第三方工具连接数据库

    默认: SQLlist  数据库

    默认:mysql -》 MySQLDB (修改django默认连接mysql方式)


    作业:

        学员管理(SQL换成ORM)

    新URL方式:

          1.班级增删改查

          --/edit-class/?nid=1

      -/edit-calss/1.html

      2.学员管理(FK连表,正向操作和反向操作)


      PS:神奇的双下划线

    你可能感兴趣的:(Python web学习)