python-django-07

python-django-07

 

 

1、使用 forms 模块处理表单
    1、forms 模块的作用
        通过forms模块,允许将表单控件与py文件相结合
    2、使用 forms 模块
        1、创建 forms.py 文件
        2、导入 forms 
            from django import forms
        3、创建class,一个class对应一个表单
            该 class 必须继承自 forms.Form
        4、在class中创建属性
            一个属性对应一个表单控件
    3、在模板中,解析 form 对象
        1、注意
            1、需要自定义 <form>
            2、需要自定义 提交按钮
        2、处理方法
            1、手动解析
                {%for filed in form%}
                    <p>{{filed.label}}:{{field}}</p>
                {%endfor%}
            2、自动解析
                {{form.as_p}}
                {{form.as_ul}} - 需要自定义 ul
                {{form.as_table}} - 需要自定义 table
    4、在HTML中提交的表单内容也可以传递给forms.Form
        views.py

        def remark_views(request):
            form = RemarkForm(request.POST)
            if form.is_valid():#必须要经过验证才能继续
                cd = form.cleaned_data #封装了提交的数据
                print(cd['uname'])
        练习:
            1、在 forms.py 中追加一个 RegisterForm 类
                增加以下属性,并生成到 register.html 显示成表单控件
                1、uname :文本框
                2、upwd :文本框 / 密码框
                3、uemail :邮件框
                4、uage :文本框
            2、在 regsiter.html 中 添加 <form> 和 提交按钮
            3、点击提交时,将数据插入到数据库中
                创建数据库 day8 ,创建Models-Users
    5、forms 的高级处理
        将 Models 和 Forms 结合到一起使用
        通过Models 自动生成表单
        1、创建 class ,EntryForm ,并继承自 forms.ModelForm
        2、创建内部类 Meta ,并定义相关信息
            1、model :指定关联的Models是谁
            2、fields
                1、指定一个列表,声明允许生成表单控件的属性
                2、取值 "__all__",表示全部属性都允许被生成表单控件
            3、labels - 字典
                {
                    '属性1':'显示文本1',
                    '属性2':'显示文本2',
                }
    6、内置小部件(widgets)
        1、什么是小部件
            生成到网页上的控件的类型
        2、常用小部件
            1、TextInput : type="text"
            2、NumberInput : type="number"
            3、EmailInput : type="email"
            4、URLInput : type="url"
            5、PasswordInput : type="password"
            6、HiddenInput : type="hidden"
            7、CheckboxInput : type="checkbox"
            8、Textarea : <textarea></textarea>
            9、Select : <select></select>
        3、小部件的使用
            1、继承自 forms.Form
                subject = forms.CharField(
                    label='标题',
                    widget=forms.TextInput(
                        attrs={
                            '属性名':'属性值',
                            'class':'form-control',
                            'placeholder':'请输入用户名'
                        }
                    )
                )
            2、继承自 forms.ModelForm
                class WidgetForm(forms.ModelForm):
                    class Meta:
                        model = Users
                        fields = '__all__'
                        labels = {
                            'uname':'...'
                        }
                        widgets = {
                            'uname':forms.TextInput(attrs={
                                'class':'form-control',
                                'placeholder':'xxx'
                            })
                        }











select * from users where uphone='13912345678' and upass='fdafdsafdsafdsa'

select * from users where uphone='13912345678'

 

 

 

cookies 和 session
1、cookies
    1、什么是cookies
        cookies是一种数据存储技术
        将一段文本保存在客户端(浏览器)的一种技术。并可以长时间的保存
    2、cookies的使用场合
        1、保存登录信息
        2、保存用户的搜索关键词
    3、django 中使用 cookies
        1、设置cookies(保存数据到客户端)
            1、不使用模板
                resp = HttpResponse("给客户端的一句话")
                resp.set_cookie(key,value,expires)
                return resp

                key : cookie的名称
                value : 保存的cookie的值
                expires : 保存的时间,以 s 为单位

                ex:
                    resp.set_cookie('uname','zsf',60*60*24*365)
            2、使用模板
                resp = render(request,'xxx.html',locals())
                resp.set_cookie(key,value,expires)
                return resp
            3、重定向
                resp = HttpResponseRedirect('/login/')
                resp.set_cookie(key,value,expires)
                return resp
            练习:
                1、完成登录操作 - fruitday
                2、判断手机号 和 密码是否正确
                3、如果正确的话,而且 勾选了 记住密码,则将登录信息保存进cookie,存期1年
        2、获取cookies(从客户端获取数据)
            request.COOKIES

            练习:
                1、完成登录操作 - fruitday
                2、当用户访问登录路径时,判断COOKIES中是否有登录的信息(id,uphone),如果存在,则提示 欢迎:13912345678。如果登录信息不存在的话,则正常显示 登录的页面
2、session - 会话
    1、什么是session
        session(会话),实际上就是服务器为每个浏览器临时开辟的一段空间,用于保存 相关的请求信息
    2、session的应用场合
        session也是为了存放数据而存在的,通常会把服务器端要用到的数据保存进 session
    3、Django中使用session
        1、设置session的值
            request.session['key']=值
            request.session.set_expiry(time):设置过期时间,如果设置为0的话则表示浏览器关闭则失效
        2、获取session的值
            request.session.get('key')
        3、删除 session 的值
            del request.session['key']
        4、settings.py 有关session的设置
            1、SESSION_COOKIE_AGE = 60 * 30
            2、SESSION_EXPIRE_AT_BROWSER_CLOSE = True
            
        练习:
            1、设置一个访问路径 /login
            2、当用户第一次访问 /login 的时候,则弹出登录页面
                模拟登录:用户名为 zhangsanfeng,密码为 :yinsusu 视为登录成功
            3、如果已经登录了,再访问 /login 的时候,则显示 :欢迎 xxx 回来 退出(超链接)
            4、点击 退出时,允许退出登录。再访问 /login 的时候,则显示 登录页面

{
'uphone': '13912345678',
'id': '1',
'csrftoken': 'RHAjXX4I71ef8FjJnoalLJvsGdK7m2ECLTSDxjDOAA8aYgV07PA2Gev6MlhpGlZU'
}

 

posted on 2019-07-24 10:01  微子天明  阅读(127)  评论(0编辑  收藏  举报

导航