python之路-django深入

django深入

路由系统

- 如果要把一个项目的urls传到子级app里面
    + url(r'app01/',include("app01.urls")),
    + settings里面需要注册下
    + 然后再app01里面创建文件urls.py 
    + url(r'index/$',views.index),
    + 这样,访问127.0.0.1:8000/app01/index/的时候就可以访问到app01底下的views.index

- url(r'^user_list/(?P<v1>\d+)/(?P<v2>\d+)',views.user_list)
    + 两个参数分别是v1 和v2

- 基于反射对应url
    + 反射比直接执行的效率要低

中间件

- middleware
    + 需要值setting里面注册
    + 如果自己新建的middleware,必须是一个包,才能引用到。
    +  'middleware.my_middleware1.my_middle_1',

- 所有中间件中必须有
    + process_view(self, request, callback, callback_args, callback_kwargs)
    + process_response(self, request, response)
- 其他方法
    + process_request(self,request)
    + process_exception(self, request, exception)

- 执行的顺序
    + process_request(self,request)
    + process_view(self, request, callback, callback_args, callback_kwargs)
    + process_exception(self, request, exception)
    + process_response(self, request, response)

- 执行的过程 
    + 请求
    + Django自动去settings里面去找middleware_classes,元组
    + for 类 in middleware_class:
            obj = 类()
            如果有 obj.process_request 方法。那么把这个方法放到
            process_request_list 方法中
            挨个找。
        最后执行process_request_list中的所有方法
            mmm.process_request
            xxx.process_request
        还有view的和response的
            mmm.process_view
            xxx.process_view

            mmm.process_response
            xxx.process_response
- 如果request 有返回值
    + httpresponse
    + 直接到response,返回的过程必须都response执行一遍。
- 如果有exception 
    + 所有exeption都要执行一遍,执行完之后再给response
    + 所有response都执行一遍
- 如果有exception,而且exception中有返回值
    + 直接到response,不再执行接下来的exception
    + 所有response都执行一遍


test

model(数据库操作)(重点)

  1. 创建表

  2. 操作表数据

Form (重点)

  1. 用户提交数据的验证
from django import forms 
from django.core.exceptions import ValidationError

#定义一个表单类,要继承forms.Form,里面定义的是表单的的字段,生成的表单里面的id是 "id_字段名"

class user_info(forms.Form):
    email = forms.EmailField()
    host = forms.CharField()
#上面两个只是普通的字段,下面加一个下拉选择的
    user_type_choice = (
        (0, u'普通用户'),
        (1, u'高级用户'),
    )
    user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice, attrs={'class': "form-control"}))
# 上面这个是用户类型选择

# widge 这个控制是什么标签 比如select textinput等,然后里面可以设置属性
#再来一个 Field里面的关键字
    title = forms.CharField(max_length=20,
                            min_length=5,
                            error_messages={'required': u'标题不能为空',
                                            'min_length': u'标题最少为5个字符',
                                            'max_length': u'标题最多为20个字符'},
                            widget=forms.TextInput(attrs={'class': "form-control",'placeholder': u'标题5-20个字符'}))

还有ValidationError 判断输入是否有效。是否引起异常
def mobile_validate(value):
    mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
    if not mobile_re.match(value):
        raise ValidationError('手机号码格式错误')
然后再class 里面添加 validators 
phone = forms.CharField(validators=[mobile_validate, ],
                            error_messages={'required': u'手机不能为空'},
                            widget=forms.TextInput(attrs={'class': "form-control",'placeholder': u'手机号码'}))

#定义表单处理函数
def form_test(request):
    obj = user_info()
    if request.method == 'POST':
        user_input_obj = user_info(request.POST)
        if user_input_obj.is_valid():
            print user_input_obj.clean()
        else:
            error_msg = user_input_obj.errors
            print error_msg
            return render(request,"form.html",{"obj":obj,"error_msg":error_msg})

#html里面处理的时候,如下形式写即可。
    {{ obj.host }}<span>{{ error_msg.host }}</span>

user_input_obj.errors.as_data
error_message 有as_ul(默认)  as_data  as_Json
  1. 用来生成HTML标签

cookie 就是字符串,保存于本机

session 就是保存于服务器
- 保存用户会话信息
- 超时时间,写入cookie的时候会有超时时间
- session依赖cookie
- 自动生产字符串
- 将str发送给客户端浏览器
- 将字符串单位key放到session里面
- 在用户的session对应的value里设置任意值
- request.session[“is_login”]=True

跨站请求伪造,跨站脚本攻击

ajax操作

    function ajaxsubmit(){
        $.ajax({
            url:"/app01/ajax/",
            type:'POST',
            tradition= True,
            data:{"host":$(".host").text(),"port":$(".port").text()},
            success: function(args){
                console.log(args);
            }
        });
    }

刷新 window.location.href = window.location.href

Admin

缓存

缓存
1. 文件方式
- 在settings里面配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR, 'cache'),
        'TIMEOUT': 600,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
} 

@cache_page(60*15

)

2. 内存方式  
3. memcache 方式

自定义分页(重点)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值