Django入门之用户管理(I)

本篇内容是利用Python语言,创建一个多用户的文章管理系统。
头图


Django入门之用户管理

自定义模板和静态文件位置
一个比较大的系统会创建多个应用,这种情况将模板、静态文件放在统一的某一位置。
一旦修改模板文件位置,应用会找不到关联文件,需要修改mysite/settings.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR),'templates',], #为跟目录添加关联路径
            'APP_DIRS': False,#告诉django不在按照默认路径寻找
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

现在在根目录里创建文件夹templates,以后根目录的关联路径就在这里了,将原来应用中的templates文件夹中文件转移过去,就可以正常显示了。
同理修改静态文件位置,需要修改mysite/settings.py在末尾添加代码

    STATIC_URL = '/static/'
    STATICFILES_DIRS =(
       os.path.join(BASE_DIR,"static"),
                      )

现在在根目录下创static文件夹就可以了。
html使用静态文件,上次是放在服务器上,我们现在将他下载放在static/css文件夹中,只要将原来去第三方服务器的路径改成

现在如果登陆http://127.0.0.1:8000/admin/浏览器会报错,TemplatesDoesNotExist at/admin,这是为什么呢,因为我们没有将后台管理模板文件放到templates中,所以去djang安装路径C:\Python27\Lib\site-packages\django\contrib\admin\templates中找到文件夹admin和registration,将他们复制到我们项目的templates中,重启服务器,输入地址,完美运行!

用户登陆
admin是管理员,从后台登陆,其他用户不需要管理后台,那从前台登陆,这又是一个功能,所以创建一个应用。cmd
python manage.py startapp account
添加settings中

    Install_apps=[
                   ...
                   'account',
                 ]

配置项目的url
添加url(r'^account/',include('account.urls',namespace='account',app_name='account')),
在account下创建url
配置应用路径

    from diango.con.urls import url
    from . import views
    from django.conf import settings
    urlpatterns=[
                 url(r'^login/$',views.user_login,name-"user_login"),
                ]

登陆有小框框啊,叫表单,那就在应用中创建一个forms.py来放表单

    from django import forms
    class LoginForm(forms.Form):
        username = forms.CharField()
        password = forms.CharField(widget=forms.PasswordInput)

登陆页面一定要返回数据与数据库进行比较的,现在介绍两个函数
is_bound()用来判定实例是否创建
is_valid() 用来比较实例与表单内容是否一致
两个都是bool型函数

都了解了就开始写函数了account/views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    from django.contrib.auth import autheneicate,login
    from .forms import LoginForm

    def user_login(requsest):
        if requsest.method == "POST":
            login_form = LoginForm(request.POST)
            if login_form.is_valid():
                cd = login_form.cleaned_data
                user = authenticate(username=cd['username'], password = cd  ['password'])
                #使用authenticate()方法验证用户名与密码是否匹配
                if user:
                    login(request,user)
                    return HttpResponse("Welcome you!")
                else:
                    return HttpResponse("Sorry.Your username or password is not right.")
            else:
                return.HttpResponse("Invalid login")
        if request.method == 'GET':
            login_form=LoginForm()
            return render(request, "account/login.html",{"form":login_form})

顺便提写一下GET与POST的区别
GET多用于数据查询而POST多用于数据写入或许更新
request.GET/POST是当客户端对服务器发出GET/POST请求后得到的类字典对象,如上,就会得到用户名和密码

看以上代码响应跳转到login.html,所以在自定义文件templates中创建account文件夹,并将login.html写入继承base.html,并写入表单csrf_token

必不可少,csrf中文名是跨站请求伪造,就是盗用了用户的身份,一用户名义发送恶意请求,Django内置框架内置CSRF插件,可以免受csrf的攻击。前端使用POST方法提交数据时会被禁止。但POST又必不可少,就是解决办法之一,在表单中任意位置写入与表单一同提交就可以了。
综上login.html就写好了
将他写成给header.html中login键的超链接只需要修改header.html中

猜你喜欢

转载自blog.csdn.net/sinat_38885850/article/details/82155399