利用装饰器模拟博客园登陆

import os

# 登录状态
status_dic = {
    ‘username‘: None,
    ‘status‘: False
}
flag = True

# 用户名,密码 以字典形式打开
def user_pwd():
    with open("user", encoding="utf-8") as f:
        dic = {}
        for i in f:
            li = i.strip().split("|")
            dic[li[0].strip()] = li[1]
        return dic

# 登录函数
def login():
    u_p = user_pwd()
    count = 0
    while count < 3:
        username = input("请输入姓名: ").strip()
        password = input("请输入密码: ").strip()
        if username in u_p and password == u_p[username]:
            status_dic["username"] = username
            status_dic[‘status‘] = True         # 状态改为True
            print("登陆成功")
            return True
        else:
            print("账号或密码错误,请重新登录")
        count += 1

# 注册函数
def register():
    while 1:
        dict1 = user_pwd()
        username = input("请输入新账号: ").strip()
        password = input("请输新入密码: ").strip()
        if username in dict1:                # 判断用户是否在文件中存在
            print("用户名已存在,请重新输入")
            continue
        elif not username.isalnum():        # 判断用户是否是字母或数字组成
            print("账号含有非法字符,请重新输入")
            continue
        elif 5 < len(password) < 15:         # 限制密码在6-14位之间
            with open("user", encoding="utf-8", mode="a") as f1:
                f1.write(username+"|"+password+"\n")
                print("恭喜!注册成功")
                return True
        else:
            print("密码不合规范,请重新输入")

# 装饰器
def auth(f):            # 限制3-7选项,没有登陆不能访问
    def inner(*args, **kwargs):
        if status_dic["status"]:
            ret = f(*args, **kwargs)
            return ret
        else:
            print("-------登录页面-------")
            login()
            ret = f(*args, **kwargs)
            return ret
    return inner

@auth
def article():
    print(f‘欢迎{status_dic["username"]}访问文章页面‘)
    print("""
    1.写入文件
    2.导入md文件
    """)
    while 1:
        choice = input("请输入要选择的操作:").strip()
        if choice == "1":
            file_name = input("输入文件名:").strip()
            content = input("请输入内容").strip()
            with open(r‘article/‘+file_name, encoding="utf-8", mode="a") as f1:
                f1.write(content)
                print("写入文章成功")
                break
        if choice == "2":
            with open("函数的进阶.md", encoding="utf-8") as f2,                    open(r"article/"+"函数的进阶.text", encoding="utf-8", mode="w") as f3:
                f3.seek(0)
                for i in f2:
                    f3.write(i)
                print("导入文件成功")
                break
        else:
            print("您输入的不合规范")

@auth
def diary():
    print(f‘欢迎{status_dic["username"]}访问日记页面‘)

@auth
def comment():
    print(f‘欢迎{status_dic["username"]}访问评论页面‘)
    file = os.listdir(os.path.dirname(__file__)+‘/article‘)  # 把article文件夹里的文件,变成列表形式
    for index, obj in enumerate(file, 1):                    # 循环列表
        print(index, obj)
    while 1:
        choice = input("请输入要评论的文章的序号:").strip()
        if choice.isdigit():
            choice = int(choice)
            if 0 < choice <= len(file):                          # 限制用户输入序号的范围
                path = os.path.join(os.path.dirname(__file__)+‘/article‘, file[choice-1])   # 拼接路径,找到该文件
                with open(path, encoding="utf-8", mode="r+") as f1:
                    ret = f1.read()
                    print(ret)
                    content = input("请输入要评论的内容")
                    sensitive = ["苍老师", "东京热", "武藤兰", "波多野结衣"]         # 此列表为敏感字符
                    for i in range(len(sensitive)):                          # 敏感字符替换等长度*
                        if sensitive[i] in content:
                            content = content.replace(sensitive[i], ‘*‘ * len(sensitive[i]))
                    if "-"*20 not in ret:                             # 判断如果不在这里加上"评论区"三个字
                        f1.write("评论区:" + "\n" + "-"*20 + "\n" + f‘{status_dic["username"]}:\n{content}‘ + "\n")
                        print("评论成功")
                        return True
                    else:                                  # 否则直接写入评论
                        f1.write(f‘{status_dic["username"]}:\n{content}‘ + "\n")
                        print("评论成功")
                        return True
            else:
                print("请选择正确的文章序号")
        else:
            print("输入内容含有非法字符")

@auth
def enshrine():
    print(f‘欢迎{status_dic["username"]}访问收藏页面‘)

# 注销
def login_out():
    status_dic[‘username‘] = None
    status_dic[‘status‘] = False
    print(‘注销成功‘)

# 退出程序
def exit_program():
    global flag
    flag = False
    return flag

def run():
    choice_dict = {
        1: login,
        2: register,
        3: article,
        4: diary,
        5: comment,
        6: enshrine,
        7: login_out,
        8: exit_program,
    }

    while flag:
        print(‘‘‘
        欢迎来到博客园首页
        1:请登录
        2:请注册
        3:文章页面
        4:日记页面
        5:评论页面
        6:收藏页面
        7:注销
        8:退出程序‘‘‘)
        choice = input(‘请输入您选择的序号:‘).strip()
        if choice.isdigit():
            choice = int(choice)
            if 0 < choice <= len(choice_dict):
                choice_dict[choice]()
            else:
                print("您输入的超出范围")
        else:
            print("输入不合规范,重新输入")

if __name__ == ‘__main__‘:
    run()

原文地址:https://www.cnblogs.com/duyu123/p/11116754.html

时间: 2024-07-31 23:12:32

利用装饰器模拟博客园登陆的相关文章

使用python selenium-webdriver模拟博客园登录

初学python,最近在抱着虫师的python+selenium自动化的书看,也尝试写个登录功能的验证2333 code:########################## #使用python selenium-webdriver #模拟博客园的登录流程 #首页--登录页面--跳转回首页--检查--退出登录恢复环境 ########################### from selenium import webdriver import time import sys url_cnbl

python简单模拟博客园系统

# 用代码模拟博客园系统## 项目分析:# 1.首先程序启动,显示下面内容供用户选择:## 1.请登录# 2.请注册# 3.进入文章页面# 4.进入评论页面# 5.进入日记页面# 6.进入收藏页面# 7.注销账号# 8.退出整个程序# 2.必须实现的功能:## 1.注册功能要求:# a.用户名.密码要记录在文件中.# b.用户名要求:不能有特殊字符并且确保用户名唯一.# c.密码要求:长度要在6~14个字符之间.## 2.登录功能要求:# a.用户输入用户名.密码进行登录验证.# b.登录成功之

python模拟博客园登录-基础版

mport timeimport inspectfrom functools import wrapsuser_status = {'username': None,'status': False} dic1 = { 1: '登录', 2: '注册', 3: '文章', 4: '日记', 5: '评论', 6: '收藏', 7: '注销', 8: '退出程序'} dic2 = { 3: 'artecle', 4: 'diary', 5: 'comment', 6: 'collection', 7

模拟博客园系统

1. 启动程序, 显?菜单列表      菜单:      1. 登录      2. 注册      3. ?章      4. ?记      5. 退出 2. ?户输入选项, ?章和?记必须在登录后才可以进?操作.(装饰器) 3. ?户注册, 将?户名和密码写入到register?件中. 同时?成"article_?户名"?件?于 存储?户?章. 同时?成"diary_?户名" 来存储?户的?记内容. 4. ?户登录成功后, ?户名和密码从register?件

利用http协议发布博客园博文评论

本博文承接<php 利用socket发送GET,POST请求>,要利用上文封装好的Http类,考虑如何通过php脚本给博客园的博文提交评论. 原理: 在做这件事前,我们首先要明白,给博文提交评论的实质就是通过http协议服务器发送一个post请求.在发布评论前,我们需要做什么呢?对,是必须要登录的.但登录是另一件事情,我们这里先不讨论.用户登录后,服务器给客户端设置一个cookie.http是无状态的.也就是说客户端向服务器发送请求后,服务器返回响应.一次通信完成.服务器不会记得刚才是谁向自己

利用Abot 抓取博客园新闻数据

1. 引言 相比于Java而言,基于C#的开源爬虫就少了很多.入行这么多年也从未接触过爬虫.出于兴趣今天给大家介绍一个C# 的爬虫工具Abot. 需要使用可以通过Nuget获取.Abot本身就支持多线程的爬取, 内部使用CsQuery来解析爬取到的Html文档.熟悉jQuery的同学肯定能快速上手CsQuery, 它就是一个C#版本的jQuery. 这里以爬取博客园当天的新闻数据为例,看看如何使用Abot. 2. 博客园新闻页面 http://news.cnblogs.com/ 这是博客园的新闻

(转)博客园登陆__JSEncrypt 分析

下面就是从博客园登录页面copy下来的js登录代码片段 博客园登录时采用的ajax发信http登录请求,就是采用jsencypt加密,以保护用户登录账号安全,一下是js片段代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

前端练习 模拟博客园页面搭建

完成效果 blog.css /*这是一个博客园首页的样式表*/ /*通用样式*/ body{ margin: 0; background-color: #eeeeee; } a{ text-decoration: none; /*取消下划线*/ } ul{ list-style-type:none; padding-left: 0; } .clearfix:after{ /*防止父标签塌陷*/ content:''; display: block; clear:both; } .blog-lef

百万年薪python之路 -- 第二周 --模拟博客园系统

项目分析: 一.首先程序启动,显示下面内容供用户选择: 1.请登录 2.请注册 3.进入文章页面 4.进入评论页面 5.进入日记页面 6.进入收藏页面 7.注销账号 8.退出整个程序 二.必须实现的功能: 1.注册功能要求: a.用户名.密码要记录在文件中. b.用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一. c.密码要求:长度要在6~14个字符之间. 2.登录功能要求: a.用户输入用户名.密码进行登录验证. b.登录成功之后,才可以访问3 - 7选项,如果没有登录或者登